【问题标题】:Why await does not wait for setTimeOut为什么 await 不等待 setTimeOut
【发布时间】:2019-10-16 09:51:58
【问题描述】:

尝试学习 async/await,下面的代码在 getUserName() 上等待 2 秒后返回用户名。 hasUser(返回一个承诺)然后只记录收到的用户名。

问题在于 then 方法日志 undefined 内的 console.log(msg)

function getUserName() {
    setTimeout(() => {
        return 'Appu'
    },2000)
}

var hasUser= async() => {
        var a = await getUserName()
        return a
    }

hasUser().then((msg) => {
    console.log(msg)
})

不知道这里有什么问题。感谢您解释此处实际发生的情况。

谢谢。

【问题讨论】:

  • getUserName 没有返回 Promise。并且 setTimeout 不返回承诺,因此您必须将其回调模式转换为承诺。 Scott 链接上接受的答案显示了如何做到这一点。

标签: javascript async-await


【解决方案1】:

hasUser 不返回承诺。您尝试 await getUserName() 但这也不会返回承诺。如果你想await getUsername() 你需要让getUserName 返回一个承诺

function getUserName() {
    return new Promise((resolve, reject) => {
       setTimeout(() => {
          resolve('Appu')
       },2000)
    })
}

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 2019-12-26
    • 2018-09-23
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多