【问题标题】:await outside async function in node -v 14.3在节点-v 14.3中等待外部异步功能
【发布时间】:2023-04-04 11:03:01
【问题描述】:

我在blog of version 14.3 release 中看到该版本支持顶级等待。这是否意味着这段代码必须工作,如果不是,[support for Top-Level Await] 是什么意思

let x = 0

let myFunc = () => {
    setTimeout(() => {
    x = 2
    }, 1000)
  return x
  }

let y = await myFunc()

console.log(y)

因为它在我更新的节点环境中不起作用

【问题讨论】:

    标签: node.js


    【解决方案1】:

    是的,Node.js 现在确实支持顶级等待,尽管该语言尚未完全实现它stage 3。您可以使用 --harmony-top-level-await 标志运行您的 Node.js 脚本

    node --harmony-top-level-await ./beer.js
    
    async function beer(){
        return "?"
    }
    
    const result = await test();
    console.log(result); // "?"
    

    您可能仍然会收到以下错误;

    SyntaxError: await is only valid in an async function
    

    要解决这个问题,您需要告诉节点您的脚本是模块类型。您可以通过这两种方式实现;

    将 package.json type 设置为 module

    {
      "main": "beer.js",
      "type": "module"
    }
    
    node --harmony-top-level-await ./beer.js
    

    或更改为.mjs 扩展名./beer.js => ./beer.mjs

    node --harmony-top-level-await ./beer.mjs
    

    【讨论】:

      【解决方案2】:

      是的,正如@DanStarns 在他的回答中所说,

      我尝试实现这个例子,

      import axios from 'axios';
      
      const response = await axios('https://quote-garden.herokuapp.com/api/v2/quotes/random');
      console.log(response.data);
      
      

      package.json

      {
        "name": "async-await-top",
        "version": "1.0.0",
        "description": "",
        "main": "top-level-async-await.js",
        "type": "module",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1"
        },
        "author": "",
        "license": "ISC",
        "dependencies": {
          "axios": "^0.19.2"
        }
      }
      

      带着旗子跑

      node --harmony-top-level-await top-level-async-await.js

      输出

      G:\async-await-top>node --harmony-top-level-await top-level-async-await.js
      {
        statusCode: 200,
        quote: {
          _id: '5eb17aaeb69dc744b4e72b82',
          quoteText: 'I can take more punishment than anyone in the business.',
          quoteAuthor: 'Ric Flair',
          quoteGenre: 'business',
          __v: 0
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-22
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多