我正在Android模拟器上测试我的React Native应用。在setState
中对诺言调用cancel
之后,我正在遵循React Blog作家Jim Sproch的建议,对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);
});
我通过导航到视图后立即退出视图来测试在Promise链中使用的代码。调用函数maybeSetHistory
时,将显示警告消息。我显然不希望在实际的电话上发生这种情况。
我尝试了建议的代码,该代码采用并包装类型为Promise
的参数。我尝试切换production
模式,然后通过在模拟器上滑动Expo
应用程序,将模式Expo
切换到production
,然后重新启动电话模拟器应用程序Packager
1}},然后按a
进行Android仿真。当production
是Packager
的模式时;尽管如此,仍会显示警告。有没有一种方法可以禁止显示此特定警告消息?我应该担心吗?我是否错误地处理了Promise
拒绝?