这是我的反应本机应用程序的代码,其中包含用于调度API调用的登录表单。登录按钮的事件处理程序将调度apiLogin-Action:
try {
await Promise.race([
dispatch(actions.doApiLogin(this.state.username, this.state.password)),
timeout(15000),
]);
} catch (e) {
const message = e.message || e;
if (message !== 'Timed out' && message !== 'Canceled by user') {
alert(message);
console.warn(e);
}
return;
} finally {
this._isMounted && this.setState({isLoading: false});
}
它抛出异常"超时未定义"。此代码取自Facebook F8-Application。我无法找到有关Promise.race-Method的详细信息,这些信息是在互联网上以这种方式处理的,但是Facebook运行的应用程序...
传递超时有什么问题?
答案 0 :(得分:3)
这与Promise.race
无关,也许您忘了定义函数timeout
,这就是函数在source code
async function timeout(ms: number): Promise {
return new Promise((resolve, reject) => {
setTimeout(() => reject(new Error('Timed out')), ms);
});
}
正如您所看到的,这是一个简单的承诺,当ms毫秒已经过去时,Promise.race
被解决/拒绝,并且第一个承诺被解决/拒绝