Я новичок в машинописном тексте, и я что-то создаю и столкнулся с проблемой, которой никогда не было, когда я использовал javascript.
Предположим, что у нас есть функция async
, которая возвращает Promise<ResultSet>
interface ResultSet {
status: number; // 0 for success 1 for failure
data?: any;
}
const getDataFromServer = async (parameter: string): Promise<ResultSet> => {
const response = await fetch(<--Prameters-->);
return await response.json();
}
Он всегда возвращает значение как Promise
.
И он должен быть подключен к интерфейсу, чтобы какой-то модуль мог его использовать. Он изменит значение глобальной переменной, используя запрос выше. И нужно вернуть результат действия (код успеха или неудачи). И это результат действия, использованного где-то в разных местах.
const storeData = async (parameter: string): number => {
const result = await getDataFromServer(parameter);
if (result.status == 0) {
SOME_GLOBAL_VARIABLE.setState({ data: result.data });
}
return result.status;
}
Как и следовало ожидать, приведенное выше определение функции выдает ошибку около async (parameter: string): number
, потому что функция должна возвращать Promise в том виде, в каком она есть async
. Так что он должен быть ниже,
const storeData = async (parameter: string): Promise<number> => {
const result = await getDataFromServer(parameter);
if (result.status == 0) {
SOME_GLOBAL_VARIABLE.setState({ data: result.data });
}
return result.status;
}
Проблема начинается с этого. Причина возврата функции - Promise
, интерфейсы всех других функций, связанные с этим, должны определять этот статус результата как Promise<number>
, а не number
. И это будет глобально воздействовать на весь серверный код. Кроме того, SOME_GLOBAL_VARIABLE
s data
также нужно набирать как Promise<T>
.
Насколько я знаю, нет способа преобразовать объект обещания в обычный объект.
I хочу сократить эту бесконечную цепочку обещаний. Там в любом случае? или это просто недоразумение? Даже замена async ~ await
на then() ~ catch()
также не удалась, потому что кажется, что она также возвращает Promise
.
Гарантия Promise
, успешно разрешено это значение или нет. Но в какой-то момент это уже гарантировано как Resolve. Но нет способа справиться с этой ситуацией.
Как я могу справиться с этой ситуацией? Это действительно частый случай при использовании машинописного текста. Но я не знаю, как это сделать.