首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这个JavaScript ES6示例中"await“后面的代码不能运行?

在这个JavaScript ES6示例中,"await"关键字只能在异步函数中使用。异步函数是一种特殊的函数,它使用"async"关键字声明,并且可以在函数体内使用"await"关键字来等待一个Promise对象的解析。

在这个示例中,如果"await"后面的代码不能运行,可能有以下几个原因:

  1. 缺少"async"关键字:如果当前函数没有使用"async"关键字声明为异步函数,那么就不能使用"await"关键字。在这种情况下,可以在函数声明前加上"async"关键字来修复问题。
  2. "await"关键字不在异步函数中:如果当前代码块不是异步函数的一部分,那么就不能使用"await"关键字。在这种情况下,可以将代码放在一个异步函数中,或者使用其他方式处理异步操作。
  3. "await"后面的表达式不是Promise对象:"await"关键字只能等待一个Promise对象的解析。如果"await"后面的表达式不是一个Promise对象,那么就会导致错误。在这种情况下,可以确保"await"后面的表达式返回一个Promise对象,或者使用其他方式处理异步操作。

综上所述,要使这个JavaScript ES6示例中"await"后面的代码能够运行,需要确保当前代码块是一个异步函数,并且"await"后面的表达式是一个Promise对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ES2017异步函数现已正式可用

如果你是在JS编写的,那么你可能会知道为什么。 下面这段代码,却实现了你的预期。...Promise 是在 ES6 引入的,并促使在编写 JavaScript 的异步代码方面,实现了巨大的提升。从此编写回调函数不再那么痛苦。...虽然这个示例清晰易懂,但是还是用到了回调。Promise 只是让回调显得比较简单和更加直观。 最佳方式:async / await 若干年前,async 函数纳入了 JavaScript 生态系统。...sleep(1000) } } 这是一个很简答的例子,如果运行这段程序,将会看到代码在 sleep 调用时暂停,下一个循环迭代将会在1秒启动。...只能用于声明为 async 的函数 因此,不能在全局范围内使用 await 如下代码: // throws an error function logger (callBack) { console.log

39810

ES2017 异步函数现已正式可用

如果你是在JS编写的,那么你可能会知道为什么。 下面这段代码,却实现了你的预期。...Promise 是在 ES6 引入的,并促使在编写 JavaScript 的异步代码方面,实现了巨大的提升。从此编写回调函数不再那么痛苦。...虽然这个示例清晰易懂,但是还是用到了回调。Promise 只是让回调显得比较简单和更加直观。 最佳方式:async / await 若干年前,async 函数纳入了 JavaScript 生态系统。...sleep(1000) } } 这是一个很简答的例子,如果运行这段程序,将会看到代码在 sleep 调用时暂停,下一个循环迭代将会在1秒启动。...) { console.error('Error:', error) } } await 只能用于声明为 async 的函数 因此,不能在全局范围内使用 await 如下代码: // throws

72840
  • 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    在古时候 ,JavaScript想以这种方式实现ajax那就是痴人说梦,但是当JavaScript升级至es6版本,通过特定的途径也可实现这种写法。...在两个关键字是es7的范畴, es6还不支持,但是可以通过特定的工具将使用这两个关键字的代码转为es6代码去执行, 比如说typescript和babel, 在此文中使用的代码示例都是由typescript...当函数被声明为async类型时,如果这个函数要有返回值 ,并且返回值要在某个回调函数获得,那么这个函数的返回结果就只能是一个 Promise对象,就像示例的ajax函数一样,返回值如果是其它类型那就达不到期望的效果...有一点需要注意, 假如需要在函数中使用await调用,那么这个函数也必须被声明为async类型, 否则编译出错, 程序无法正常运行。...所以, 第二个要点就是 await就是用来等待Promise对象resolve和reject这两个函数的执行的,并且将这两个函数传递的参数当作返回结果赋给变量,如同run函数代码示例那样。

    2.8K50

    JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 asyncawait 更好地编码方式!

    在单线程环境编程的缺陷以及如何解决这些缺陷来构建健壮的JavaScript UI。按照惯例,在本文的最后,分享5个如何使用async/ wait编写更简洁代码的技巧。 为什么单线程是一个限制?...当调用堆栈有函数要执行时,浏览器不能做任何其他事情——它被阻塞了。这意味着浏览器不能渲染,不能运行任何其他代码,只是卡住了。那么你的应用 UI 界面就卡住了,用户体验也就不那么好了。...请看下面的代码: setTimeout(myCallback, 1000); 这并不意味着myCallback将在1000毫秒就立马执行,而是在1000毫秒,myCallback被添加到队列...使用 async 声明函数时可以包含一个 await 符号,await 暂停这个函数的执行并等待传递的 Promise 的解析完成,然后恢复这个函数的执行并返回解析的值。...最后,重要的是不要盲目选择编写异步代码的“最新”方法。理解异步 JavaScript 的内部结构非常重要,了解为什么异步JavaScript如此关键,并深入理解所选择的方法的内部结构。

    3.1K20

    JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切

    所以回到前面的例子,当引擎读取上面的代码时,全局内存中被填充了两个绑定: 全局内存 即使例子只有变量和函数,也要考虑你的 JavaScript 代码在更大的环境运行:浏览器或在 Node.js ...请注意,因为这个概念有助于理解“JavaScript是单线程”这句话。 但是现在让我们回到上面的例子。...在接下来的部分,你将看到异步代码如何在 JavaScript 工作以及为什么这样工作。...在后面的内容,我们将详细介绍 ES6 Promises。 回调地狱和 ES6 的 Promise JavaScript 的回调函数无处不在。它们用于同步和异步代码。...ES6 Promise 和 microtask 队列 如果你还记得前面的章节,JavaScript 的每个异步回调函数都会在被推入调用栈之前在回调队列结束。

    1.5K30

    Node.js的事件循环

    Node.js JavaScript 代码运行在单个线程上。每次只处理一件事。 这个限制实际上非常有用,因为它大大简化了编程方式,而不必担心并发问题。...阻塞事件循环 任何花费太长时间才能将控制权返回给事件循环的 JavaScript 代码,都会阻塞页面任何 JavaScript 代码的执行,甚至阻塞 UI 线程,并且用户无法单击浏览、滚动页面等。...被阻塞是个异常,这就是 JavaScript 如此之多基于回调(最近越来越多基于 promise 和 async/await)的原因。 调用堆栈 调用堆栈是一个 LIFO 队列(后进先出)。...此时,调用堆栈如下所示: 每次迭代的事件循环都会查看调用堆栈是否有东西并执行它直到调用堆栈为空: 入队函数执行 上面的示例看起来很正常,没有什么特别的:JavaScript 查找要执行的东西,并按顺序运行它们...ES6 作业队列 ECMAScript 2015 引入了作业队列的概念,Promise 使用了该队列(也在 ES6/ES2015 引入)。

    2.7K20

    惊艳!可视化的 js:动态图演示 Promises & AsyncAwait 的过程!

    你是否运行过不按你预期运行的 js 代码 ?...为什么这个状态很重要呢? 在上面的例子,我们只是为 Promise构造器传递了一个简单的回调函数 () => {} 。 然而,这个回调函数实际上接受两个参数。...当我们运行面的代码块时让我们看下发生了什么: 额,这里发生了什么呢? 首先,JavaScript 引擎遇到了 console.log。它被弹入到调用栈,这之后 Before function!...函数体的执行被暂停,async函数剩余的代码会在微任务运行而不是一个常规任务!...现在,因为遇到了await关键字,异步函数myFunc被暂停,JavaScript引擎跳出异步函数,并且在异步函数被调用的执行上下文中继续执行代码:在这个例子是全局执行上下文!‍

    2.1K10

    JavaScript 异步编程指南 — 终极解决方案 AsyncAwait

    ES7 之后引入了 Async/Await 解决异步编程,这种方式在 JavaScript 异步编程目前也被称为 “终极解决方案”。...// 错误的操作 (() => { await 'A'; })(); 这样写也是不行的,在 “协程” 一讲也提过类似的示例,只不过当时是基于 yield 表达式,async/await 实际上是...Generator 函数的一种语法糖,内部机制是一样的,forEach 里面的匿名函数是一个普通的函数,运行时会被看作是一个子函数,栈式协程是从子函数产生的,而 ES6 实现的协程属于无堆栈式协程,...以下代码运行时会直接失败。...(async () => { await Promise.all([ fetch(url1), fetch(ur2) ]) })(); 通过这个示例可以看出,async/await

    1.2K20

    谈谈ES6语法(汇总下篇)

    模拟sleep JavaScript一直没有休眠的语法,但是借助await命令就可以让程序停顿指定的时间。...上面的代码,sayHi方法单独使用,this会指向该方法运行时所在的环境(由于class内部是严格模式,所以this实际上指向undefined)。...this.job = job; this.sayHi = this.sayHi.bind(this); } } 复制代码 继承 ES5继承的方式我之前有整理过--JavaScript 的六种继承方式...上面这样写,不能继承构造函数里面的属性值和方法。...参考和后话 阮一峰的ES6教程 codepen 代码验证 本次的ES6语法的汇总总共分为上、、下三篇,本篇文章为下篇。 谈谈ES6语法(汇总上篇) 谈谈ES6语法(汇总中篇) 系列文章至此已经完结!

    39010

    把 Node.js 的回调转换为 Promise

    介绍 在几年前,回调是 JavaScript 实现执行异步代码的唯一方法。回调本身几乎没有什么问题,最值得注意的是“回调地狱”。 在 ES6 引入了 Promise 作为这些问题的解决方案。...JavaScript 将这些运行时间很长的任务转移到浏览器或 Node.js 环境的其他进程。这样它就不会阻止其他代码的执行。 通常异步函数会接受回调函数,所以完成之后可以处理其数据。...return; } console.log(data); }); for (let i = 0; i < 10; i++) { console.log(i); } 运行代码将会输出...什么是 Promise 在 ECMAScript 2015(ES6引入了 Promise,用来改善在异步编程方面的体验。...{ console.log(data); }) .catch(err => { console.log(err); }); 另外也可以用下面这个示例给出的

    2.5K20

    JavaScript——ES6模块化与异步编程高级用法

    ES6模块化规范定义: 每个js文件都是一个独立的模块 导入其他模块成员使用import关键字 向外共享模块成员使用export关键字 node.jsES6模块化 node.js 默认仅支持 CommonJS...因此,需 要先运行如下的命令,安装 then-fs 这个第三方包,从而支持我们基于 Promise 的方式读取文件的内容: npm i then-fs thn-fs的基本使用 调用 then-fs 提供的...、阅读性差、 不易理解 注意事项: 如果在 function 中使用了 await,则 function 必须被 async 修饰 在 async 方法,第一个 await 之前的代码会同步执行,await...只有前一个任务执行完毕,才能执行一个任务 ② 异步任务(asynchronous) 又叫做耗时任务,异步任务由 JavaScript 委托给宿主环境进行执行 当异步任务执行完成,会通知 JavaScript...JavaScript 主线程的执行栈被清空,会读取任务队列的回调函数,次序执行 JavaScript 主线程不断重复上面的第 4 步 EventLoop 的基本概念 JavaScript 主线程从“

    70040

    70个JavaScript面试问题

    但是在上面的示例,globalVar变量的值为abc。...保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。...为什么在调用这个函数时,代码的b会变成一个全局变量? function myFunc() { let a = b = 0; } myFunc(); 原因是赋值运算符是从右到左的求值的。...什么是 ES6 模块? 模块使我们能够将代码基础分割成多个文件,以获得更高的可维护性,并且避免将所有代码放在一个大文件。在 ES6 支持模块之前,有两个流行的模块。...什么是 async/await 及其如何工作? async/await是 JS 编写异步或非阻塞代码的新方法。它建立在Promises之上,让异步代码的可读性和简洁度都更高。

    1.5K10

    「React 基础」在 React 项目中使用 ES6,你需要了解这些

    在 React 的运用也十分频繁,主要利用了箭头函数this穿透性,this指向上一层的作用域中,示例代码如下: ?...在 React 我们使用这个特性也比较频繁,比如用在 render 方法渲染的场景示例如下: ?...正式由于这个新的特性,大大的减少了我们的代码量,其在 React 的场景比较多,如下面示例,我们使用在 render() 方法中加载一个待办事项数组列表,示例如下: ?...关于 Promise 的用法,笔者以前的文章有过详细介绍,感兴趣的同学可以点击这篇文章进行了解「JavaScript基础」Promise使用指南 async / await async/await 是基于...关于 async / await 的用法,笔者以前的文章有过详细介绍,感兴趣的同学可以点击这篇文章进行了解「JavaScript基础」深入学习async/await 本文主要参考《 React Cookbook

    3.1K30

    8个在学习React之前必须要了解的JavaScript功能

    2、Arrow函数 ES6引入了Arrow函数,这是编写常规函数的简便方法。Arrow语法更短,更容易编写。许多开发人员在他们的React代码中使用它。...3、解构 销毁是你需要了解的重要ES6功能之一。它在React代码上使用了很多。这就是为什么你应该了解它。 它允许你复制对象或数组的一部分并将其放入命名变量。...4、ES6模块 ES6模块import和export无处不在。因此,你需要对它们有一个很好的了解。它们使你可以将文件代码共享,导出和导入到另一个文件。...这是在JavaScript文件之间共享代码的好方法。 在原始JavaScript,你必须首先告诉浏览器你正在使用模块。...这就是为什么我认为你在学习React之前,而应该先学习一下JavaScript的三元运算符的原因。

    1.3K20

    ES6重难点整理

    对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),不能保证指向的数据结构不可变。...当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。 这也是它最受欢迎的地方:能让异步代码写起来像同步代码,并且方便控制顺序。...在ES6(和ES5相比),class的new实例有以下特点: class的构造参数必须是new来调用,不可以将其作为普通函数执行 es6 的class不存在变量提升 最重要的是:es6 内部方法不可以枚举...:不可枚举 console.log("ES6 :"); for (let _ in es6) { console.log(_); } 参考/推荐:《JavaScript 创建对象—从 es5 到...es6》 Proxy 代理器 他可以实现 js 的“元编程”:在目标对象之前架设拦截,可以过滤和修改外部的访问。

    64430

    JavaScript 常见面试题速查

    ,其非值为 false # 为什么会有 BigInt JavaScript Number.MAX_SAFE_INTEGER 表示最大安全数字,计算结果是 9007199254740991,即在这个数范围内不会出现精度丢失...async 属性 该属性会使脚本异步加载,不会阻塞页面的解析过程,但当脚本加载完成立即执行 JavaScript,这时如果文档没有解析完成的话同样会阻塞 多个 async 属性的脚本的执行顺序不可预测...模块和 CommonJS 模块 异同 区别 CommonJS 对模块是浅拷贝,ES6 Module 是对模块的引用,即 ES6 Module 只存只读,不能改变其值,即指针指向不能变,类似 const...作用域是分层的,内层作用域可以访问外层,反之不行 块作用域 ES6 中新增 let 和 const 指令可以声明块级作用域 块级作用域可以在函数创建,也可以在一个代码块({})创建 let 和...async 函数返回的是一个 Promise 对象,所以在最外层不能await 获取其返回值的情况下,当然应该用原来的方式: then() 链来处理这个 Promise 对象。

    52230

    75个JavaScript面试题集锦,内含解答,自测 JS 掌握程度

    为什么在调用这个函数时,代码的`b`会变成一个全局变量? 40. ECMAScript是什么? 41. ES6或ECMAScript 2015有哪些新特性? 42....但是在上面的示例,globalVar变量的值为abc。...保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。...为什么在调用这个函数时,代码的`b`会变成一个全局变量? function myFunc() { let a = b = 0; } myFunc(); 原因是赋值运算符是从右到左的求值的。...什么是 `async/await` 及其如何工作? async/await是 JS 编写异步或非阻塞代码的新方法。它建立在Promises之上,让异步代码的可读性和简洁度都更高。

    13.3K94
    领券