Javascript `await` "SyntaxError: Unexpted identifier"即使我在 `async` 函数中等待

标签 javascript node.js promise async-await

当我在 async 模块中等待时,Javascript await 给出了以下错误

let ImagesArray = await getImages();
                            ^^^^^^^^^
SyntaxError: Unexpected identifier
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:607:28)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (C:\Users\junai\Desktop\giantbomb-api-test\index.js:8:17)

这是我的代码片段。我做错了什么?

    async function getImages(){
        return new Promise(function(resolve, reject) {
            request.get("URL", function (error, response, body) {
                let images = JSON.parse(body).results.map((image)=>{
                    return image.original_url;
                })
                resolve(images);
        });
      })
    }


    module.exports = async function addGame(req, res){
      let ImagesArray = await getImages();
      ImagesArray.forEach(URL => {
          images.push({
              "data": URL,
              "uploadType" : "url",
              "type": "image/jpeg",
              "name": game.name
          })
      });
      console.log(images);
    }

另一方面,以下代码有效但输出不同:

var images = [{
    "image": {
        "data": "FIRST IMAGE",
        "uploadType": "url",
        "type": "image/jpeg",
        "name": game.name
    }
}];
(async function main() {
    let ImagesArray = await getImages();
    ImagesArray.forEach(URL => {
        images.push({
            "data": URL,
            "uploadType": "url",
            "type": "image/jpeg",
            "name": game.name
        })
    });
    console.log(images); // [{"image" : {"data": "FIRST IMAGE", "uploadType" : "url", "type": "image/jpeg", "name": game.name } }, {...}, {...} ]
})();
console.log(images); // [{"image" : {"data": "FIRST IMAGE", "uploadType" : "url", "type": "image/jpeg", "name": game.name } }]

最佳答案

第二个片段的问题在于 main 函数是异步执行的。在执行完成之前打印 images

由于 async 函数返回一个 Promise,您可以使用 then像这样:

var images = [{
    "image": {
        "data": "FIRST IMAGE",
        "uploadType": "url",
        "type": "image/jpeg",
        "name": game.name
    }
}];

async function main() {
   let ImagesArray = await getImages();
   ImagesArray.forEach(URL => {
       images.push({
           "data": URL,
           "uploadType": "url",
           "type": "image/jpeg",
           "name": game.name
       })
    });
});

main().then(() => console.log(images));

一旦top-level await proposal lands ,您将能够等待 main

关于Javascript `await` "SyntaxError: Unexpted identifier"即使我在 `async` 函数中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142046/

相关文章:

javascript - Redux 或 setTimeout - 如何观察子组件中的 props 变化?

node.js - 无法在 Protractor 中使用nodejs删除文件

mysql - promise 自定义方法

sockets - Node.js 未捕获套接字异常 - 套接字已关闭

javascript - AMP HTML 文件无法呈现,因为 https ://cdn. ampproject.org/robots.txt 设置为禁止

javascript - 如何使选择的语言下拉列表也保留在下一页?

javascript - 使用 Nodejs 读取存储在 aws S3 中的 JSON 文件

node.js - 图像上传 - 如何获取正确格式的图像数据以供服务器端处理

javascript - 在 node.js 中更改密码和注销时使 JWT 无效的最佳实践?

mysql - 用来自多个 mysql 查询的数据填充对象数组