javascript - 在没有 async 关键字的情况下在全局范围内使用 await

标签 javascript node.js ecmascript-6 es6-promise

我正尝试在 nodejs REPL 的全局范围 上做这样的事情。根据我的理解,以下两种说法都是有效的。 see docs

let x = await Promise.resolve(2);
let y = await 2;

但是,这两个语句都会引发错误。

谁能解释一下为什么? 我的 Node 版本是 v8.9.4

最佳答案

更新

当使用 Node 时,文件当前必须有一个 .mjs 扩展名才能工作。

顶级等待可以在浏览器模块中使用。使用时,脚本标记必须包含 type 属性,该属性必须设置为 module:

<script src="/script.js" type="module"></script>
const start = Date.now()

console.log('Pre call.')
await delayedCall()
console.log('Duration:', Date.now() - start)

function delayedCall() {
  return new Promise(resolve => setTimeout(() => resolve(), 2000))
}

旧答案

await 只能在标记为 async 的函数中使用,因此有两种方法可以解决这个问题。

注意: 有一项提案可能最终允许使用 Top level await。电话。

第一种方法是像这样创建一个自调用函数:

(async function() {
  let x = await Promise.resolve(2)
  let y = await 2
  
  console.log(x, y)
})()

或者第二种方式是使用.then()

Promise.resolve(2).then(async data => {
  let x = data
  let y = await 2

  console.log(x, y)
})

关于javascript - 在没有 async 关键字的情况下在全局范围内使用 await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51525234/

相关文章:

javascript - 如何使用node js将json纯文本编码为json数据

node.js - npm 审计不起作用并且没有列出依赖项的描述

node.js - 访问 Hapi 请求 id 而不到处传递请求对象?

javascript - 无法在 webpack.config 上要求 webpack

javascript - lodash _.remove 不适用于对象内容

javascript - 在 fabricJS 中将 JSON 加载到 Canvas 上后,文本位置发生了变化

javascript - 如果异步加载绑定(bind)资源,则在函数中包装 $watch/$timeout 会破坏双向绑定(bind)

javascript - 结合 es6 函数 every 和 sum 并返回 bool 值

javascript - 返回页面时 PHP 搜索结果

javascript - 用于散列有效负载发布数据的最佳加密货币