Promise.race fires"超时未定义"

时间:2016-05-16 17:49:01

标签: reactjs react-native ecmascript-6 es6-promise

这是我的反应本机应用程序的代码,其中包含用于调度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运行的应用程序...

传递超时有什么问题?

1 个答案:

答案 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被解决/拒绝,并且第一个承诺被解决/拒绝