当前位置: 首页 > 知识库问答 >
问题:

为什么await不等待setTimeOut

潘兴朝
2023-03-14

尝试学习Async/await(以下代码),等待getUserName()在2s后返回用户名。hasuser(返回一个promise)然后只记录接收到的用户名。

问题是then方法中的console.log(msg)记录了未定义

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

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

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

不确定这里出了什么问题。很感谢解释一下这里到底发生了什么。

多谢了。

共有1个答案

倪举
2023-03-14

HasUser不返回promise。您尝试等待getUserName(),但这也不会返回promise。如果要等待getUsername(),则需要使getUsername返回一个promise

function getUserName() {
    return new Promise((resolve, reject) => {
       setTimeout(() => {
          resolve('Appu')
       },2000)
    })
}
 类似资料:
  • 我正在努力学习如何正确使用async Wait,但我对它有点共同的想法。 在片段中,我试图构建一个对象数组,其中包含我需要的关于我在组件中上传的文件的信息。问题是this.fileInfo中的对象并没有完全等待返回编码图像的promise,而是在我console.logthis.fileInfo时返回此输出: 如您所见,关键图像是一个值未定义的ZoneAwarePromise。你能帮我修一下吗?

  • 问题内容: 为什么线程不等待?线程启动,然后进入等待池,但是在那一刻之后它将继续执行。 问题答案: 您正在线程对象本身上进行同步,这是错误的用法。即将发生的事情是,即将死去的执行线程总是调用其对象: 依赖于this。因此,很清楚为什么在其中有或没有自己的情况下都会得到相同的行为。 解决方案:使用单独的对象进行线程协调;这是标准做法。

  • 在下面的代码中,为什么主线程要等到子线程完成。 Driver.java ThreadRunner.java 调用“t.start()”后,在驱动程序类中,程序是否应该退出?我没有使用join,但主线程仍在等待,直到新旋转的“ThreadRunner”运行开始。这是因为在java中,主线程(由main方法启动)总是等待所有线程关闭吗?

  • 我有以下测试WebAPI代码,我没有在生产中使用WebAPI,但我之所以这样做是因为我讨论了这个问题:WebAPI异步问题 不管怎样,下面是冒犯的WebAPI方法: 因此,我认为第二个异常是预期的,因为当完成时,它很可能位于另一个线程上,其中作为线程静态变量将不再解析为适当的值。现在,基于同步上下文,它实际上可以在await之后被强制返回到相同的线程,但我在测试中没有做任何花哨的事情。这只是对的简

  • 问题内容: 我正在阅读Caleb Doxsey的Go书,我对http://www.golang-book.com/4有两个疑问 我想知道为什么在第二个Scanf之后程序没有停止并等待用户输入?以及如何测试用户是否输入了整数和/或没有留空? 问题答案: 这是发行5391::拒绝在Windows上线的末端。 作为一种解决方法,要检查输入是否有效,请编写, 和 解决方法是格式字符串中的换行符。 包 功能

  • 我正在编写一个简单的应用程序来保存和查找位置。我用的是猫鼬和茉莉节点。 用户CRUD测试工作符合预期。但是,我单独创建了用户来测试不同的自定义验证。我还通过清除集合并重新加载所有用户来启动测试,以确保在启动save/update/etc测试之前所有测试数据都是良好的。 对于位置,我也在做同样的事情,但我有几十个位置,我想使用数组加载它们。。。并在整个过程中测试负载,确保其正常工作。 如果我只做一个