首页 > 解决方案 > 为什么等待后我的代码行没有被调用?

问题描述

我对以下代码有疑问。firebase.login 返回一个 Promise,我了解到,当我之前输入“await”时,Javascript 会等到 Promise 交付,然后继续下一行。我

但是下一行似乎永远不会被触发。我究竟做错了什么?它也不会停留在“调试器”标记处。

    try {
      const user = await firebase.login(email, password);
      console.log("l1: ", user);
      debugger;
      props.history.replace("/impressum");
    } catch (error) {
      alert(error.message);
    }
  }```

标签: javascriptreactjsasynchronouspromiseasync-await

解决方案


调用返回Promise的值firebase.login();应该包含在一个async函数中(我们无法从您的代码段中看到)。正如评论中提到的,它可能catch会被触发,在这种情况下,您应该优雅地处理错误。

// mock the firebase login Promise
const firebase = {
  async login(email, password) {
    return {
      email
    };
  }
};

(async() => {
  try {
    const [email, password] = [
      'joe.bloggs@example.com',
      'password123',
    ];
    const user = await firebase.login(email, password);

    console.log(user);
  } catch (err) {
    console.error(err);
  }
})();


推荐阅读