Я тестирую свое приложение React Native на симуляторе Android.Я следую совету автора React Blog, Джима Спроха, отменить setState
с отклоненным обещанием после вызова cancel
на обещании в componentWillUnmount
.Я немного изменил код, чтобы принять функцию, а не обещание:
export const makeCancelableFunction = (fn) => {
let hasCanceled = false;
return {
promise: (val) => new Promise((resolve, reject) => {
if (hasCanceled) {
reject({isCanceled: true});
} else {
fn(val);
resolve(val);
}
}),
cancel() {
hasCanceled = true;
}
};
};
Параметр fn
- это функция, которая устанавливает состояние.Я получаю предупреждающее сообщение таким образом, как использую его, если и только если обещание отклонено от makeCancelableFunction
:
Possible Unhandled Promise Rejection (id: 1):
Вот как я использую функцию:
this.maybeSetHistory = makeCancelableFunction((results) => {
this.setState({
history: results,
});
});
/* code hidden */
}).then((results) => {
this.maybeSetHistory.promise(results);
}).catch((reason) => {
this.props.errorCallback(reason);
});
Я проверяю код в том виде, в котором он используется в цепочке обещаний, выходя из представления сразу после перехода к представлению.При вызове функции maybeSetHistory
появляется предупреждающее сообщение.Я явно не хочу, чтобы это происходило на реальных телефонах.
Я попробовал предложенный код, который принимает и переносит параметр типа Promise
.Я попытался переключить режим production
, затем перезапустить приложение эмулятора телефона, Expo
, смахнув приложение Expo
на эмуляторе, переключив режим на production
на Packager
, затем нажать a
дляЭмуляция Android.Когда production
- это режим Packager
;тем не менее, предупреждение появляется.Есть ли способ подавить это конкретное предупреждающее сообщение?Должен ли я быть обеспокоен?Я неправильно обрабатываю Promise
отказов?