繁体   English   中英

Javascript `await` “SyntaxError: Unexpted identifier” 即使我在一个 `async` 中等待 function

[英]Javascript `await` “SyntaxError: Unexpted identifier” even if I am awaiting inside an `async` function

当我在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);
    }

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

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 function 是异步执行的。 在执行完成之前打印images

由于async function 返回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));

一旦顶层await提案落地,你就可以直接 await main了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM