У меня такая ситуация:
import processAsyncCall from "../helpers/processAsyncCall";
const promiseWrapper = () => new Promise((res, rej) => { /* [1] */ });
const onResolve = () => { /* [2] */ };
dispatch(processAsyncCall(promiseWrapper, onResolve));
-
promiseWrapper
содержит обещание, которое будет выполнено при выполнении определенного действия (например: получить файл, обновить содержимое и т. Д.).
- Этот метод будет вызван, когда
promise
внутри promiseWrapper
разрешится.
Давайте посмотрим на processAsyncCall
.
export default (
promiseWrapper,
onResolve = null,
) => (dispatch, getState) => {
dispatch(showLoading());
promiseWrapper()
.then(result => {
if (onResolve !== null && typeof onResolve === "function") {
onResolve(dispatch, getState)(result);
}
})
.catch(() => console.log("ERROR_IN_ASYNC"))
.finally(() => dispatch(hideLoading()));
});
};
Важная часть promiseWrapper().then(result => { /* ... */})
.
Я выполняю функцию promiseWrapper
, чтобы создать Обещание на месте .
Мой вопрос:
Обязательно ли заключать обещание в функцию, чтобы убедиться, что оно не разрешено до его обработки?
У меня была такая проблема, когда обратный вызов then
не работал бы, если бы я непосредственно передал Promise в качестве параметра.
dispatch(processAsyncCall(new Promise(/* ... */), /* ... */));
Насколько я понимаю, когда обещание разрешает , вызывается обратный вызов then
. Но если функция разрешается и в это время отсутствует обратный вызов then
, то Promise равно выполнено / выполнено / мертво .
Имейте в виду, что приведенный выше пример довольно прост, но в некоторых случаях Promise создается в другом месте и передается до достижения функции processAsyncCall
.