为什么“async/await”在我的情况下不起作用?

2024-02-20

我读到async/await,但我有一个关键问题。 首先,我解释一个旧的例子来展示我的问题的基础,然后我问我的确切问题。

大家都知道:

console.log('1');
console.log('2');
console.log('3'); // Ex: 123

这很简单,但在以下情况下:

console.log('1');
setTimeout(()=>{
    console.log('2');
},0);
console.log('3'); // Ex: 132

做法也很简单,setTimeout函数是asynchronous and JavaScript从它跳转并在解析后运行它的函数,所以我们看到2 after 1 and 3.

但是,现在我读到async/await我写了一个这样的函数:

(async function test() {
    console.log('1');
    await setTimeout(()=>{
        console.log('2');
    },0);
    console.log('3');
})(); // Ex: 132

出口是132也是,为什么?这是我的问题,为什么3之前运行2?我期望因为async/await after 1JavaScript 等待2然后写了3. why 132?


await仅当传递给它的值是 a 时才挂起Promise。就你而言,setTimeout返回一个Number所以await并不等待它。

正确的代码如下:

async function test() {
    console.log('1');
    await new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('2');
            resolve()
        }, 0);
    });
    console.log('3');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“async/await”在我的情况下不起作用? 的相关文章

  • 主干关系事件未触发?

    class TheModel extends Backbone RelationalModel relations type Backbone HasMany key subModels relatedModel SubModel coll
  • ReferenceError:找不到变量:需要

    我在加载时遇到问题node modules到我的网页之一 我已经安装了 npm node js 并且我想使用require 函数在我的网站上初始化 Firebase 我不知道为什么 但它抛出引用错误 ReferenceError 找不到变量
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • HTMLImageElement 作为 React Child 无效

    我正在尝试异步加载图像 并且仅在加载图像后才将其显示在 React 应用程序中 componentDidMount const img new Image img onload gt this setState originalImage
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • 我可以从 HTTP 请求中找到无线接入点的 BSSID(MAC 地址)吗?

    假设有人在咖啡店里无线连接到互联网 并向 johnsveryownserver com 发送 HTTP 请求 服务器端 有什么方法可以确定我的MAC地址吗 无线接入点他们连接到什么 请注意 我对他们机器的 MAC 地址不感兴趣 如果我无法使
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • ElectronJS ReferenceError:导航器未定义

    我正在尝试在电子上制作自定义标题栏 但是当我启动我的应用程序时 我遇到了 ReferenceError 导航器未定义 问题 请帮忙 这是我的 main js 中的代码片段 My Codes https i stack imgur com c
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 是否可以使用打字稿映射类型来创建接口的非函数属性类型?

    所以我正在研究 Typescript 的映射类型 是否可以创建一个接口来包装另一种类型 从而从原始类型中删除函数 例如 interface Person name string age number speak void type Data
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1

随机推荐

  • 使用哪一个?数据库中的 EAV 或 Blob?

    我目前正在努力重新设计我们应用程序的数据系统 基本上 它的设计目的是让人们可以添加他们想要的所有自定义字段 而只有一些常量 始终存在的字段 我们当前的设计给我们带来了很多维护问题 我们所做的是动态地 在运行时 为每个字段向数据库添加一列 我
  • 错误:无法找到 SDK“iphonesimulator9.0”

    我最近将 Xcode 更新到 7 1 并下载了 iOS 8 4 和 iOS 9 0 模拟器 当我跑步时 xcodebuild showsdks I get OS X SDKs OS X 10 11 sdk macosx10 11 iOS S
  • 使用 Jackson 忽略 JSON 对象上的新字段 [重复]

    这个问题在这里已经有答案了 我正在使用 Jackson JSON 库将一些 JSON 对象转换为 Android 应用程序上的 POJO 类 问题是 在发布应用程序时 JSON 对象可能会发生变化并添加新字段 但目前 即使添加一个简单的 S
  • 使用 PHP 和 preg_replace 拆分并替换内容而不是爆炸?

    我有一个 PHP HTML 代码作为包含函数的字符串 我希望用包含的内容替换一些函数调用 将多个文件合并为一个 简短示例 之前 h1 Content in between h1 简短示例 替换内容 h1 Content in between
  • 将 .NET 字符串中的制表符转换为空格

    我正在使用正则表达式构建一个文本解析器 我需要将字符串中的所有制表符转换为空格字符 我无法假设一个制表符应包含多少个空格 否则我可以用 4 个空格字符替换制表符 对于此类问题有什么好的解决办法吗 我需要在代码中执行此操作 因此无法使用外部工
  • 如何以普通用户身份运行捆绑安装

    我正在尝试使用bundle install 我不是 Ruby 用户 这是我第一次真正尝试运行 rake 我只是尝试使用 ThrowtheSwitch org 中使用 Rake 等的一些软件包 我几天前最初使用以下命令安装了 ruby sud
  • 是否可以使用谷歌计算引擎运行硒脚本?

    我想在云 在线 远程运行我的硒脚本 我被告知谷歌计算引擎可以允许这样做 如果可以确认这一点并且还需要给出额外的步骤 我们将不胜感激 任何其他建议的解决方案将不胜感激 唯一的区别是您的 GCE 实例没有显示屏 这对您的浏览器来说将是一个问题
  • 无法获取我的模板文件中的资源文件(使用 Restlet 和 Freemarker)

    我正在尝试使用 Restlet 开发一个 web 应用程序 但在访问 public css 和 public js 时遇到了一些问题 我在控制台中有这样的消息 INFO 2012 03 10 23 52 59 127 0 0 1 8182
  • 使用正则表达式匹配两个标签之间的所有内容?

    如何匹配 PCRE 两个标签之间的所有内容 我尝试过这样的事情 但对我来说效果不太好 我对正则表达式有点陌生 所以我希望有人能好心地向我解释如何实现这一点 如果正则表达式可能的话 Thanks string div text div reg
  • INotifyPropertyChanged:通知另一个类

    我有一堂课 我们称之为MyContainerClass 这是其他几个类的容器 我们称它们为ClassA to ClassF ClassA to ClassF继承相同的基类 我们称之为MyBaseClass In MyBaseClass我有一
  • React-router (v4) 如何返回?

    试图弄清楚如何返回上一页 我在用 react router v4 1 这是我在第一个登陆页面中配置的代码
  • 使用 HTTP Live Streaming 替代音轨

    当 HLS 流准备好播放时 我正在生成可用音轨的列表 我可以很好地访问可用的音轨 但我很难为每个轨道提取正确的 标题 我在用着苹果的测试流 https devimages apple com edgekey net streaming ex
  • 在 PageViewController 中导航不起作用

    我有 3 种类型的 VC 第一种 VC 第二种 VC 是PageViewController有 3 页 我添加了PageController正常ViewController在这里 第三个是FinalViewController 第一个 VC
  • 多个动态输入文本javascript

    我在使用 javascript 创建多个输入文本时遇到问题 我的观点是每次之前的输入完成后都会创建一个新的输入文本 家长 我有一些组合框的代码 但这次我只需要输入文本框 我怎样才能做到这一点 我找到了这段代码
  • WSAEWOULDBLOCK 处理

    我已经在使用winsock 的C CLI 中为服务器编写了一个套接字 套接字使用异步方法来发送 接收和接受连接 在生产环境中实现套接字后 发送函数停止工作 并给出错误 WSAEWOULDBLOCK 根据我在网上的研究 这意味着套接字 IO
  • NavigationLink 在 ScrollView 中显示错误

    我在Swift编程的时候也遇到过这个问题 我创建了这个长框架 就在这里 该框架的主要思想将用于不同视图中的水平滚动视图 如下所示 它将打开不同的视图 这就是问题所在 如果我们想转换到不同的视图 我们需要NavigationLink 为了工作
  • linux c语言中如何将绝对路径转换为相对路径

    我想知道如何在linux Ubuntu 操作系统上的c语言中根据给定目录 包括链接文件 将符号链接的绝对路径转换为相对路径 我想搜索相对路径的子字符串 但如果它已经存在于文件夹层次结构的更高位置怎么办 这是我想要做的更具体的描述 相对路径
  • Java 中的“代码太大”编译错误

    Java 代码有最大长度限制吗 我写了一个超过10000行的函数 实际上 每一行都为一个数组变量分配一个值 arts bag 10792 newyorkartworld arts bag 10793 leningradschool arts
  • 如何将 Javascript 文件导入 Typescript

    我想知道如何从 Typescript 启动 Twitter Bootstrap carousel carousel 我必须实施jquery d ts修复 sign 调用 但我仍然收到错误 carousel 在 jquery d ts 中找不
  • 为什么“async/await”在我的情况下不起作用?

    我读到async await 但我有一个关键问题 首先 我解释一个旧的例子来展示我的问题的基础 然后我问我的确切问题 大家都知道 console log 1 console log 2 console log 3 Ex 123 这很简单 但