簡體   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