Javascript `await`" SyntaxError: Unexpted identifier ", даже если я ожидаю внутри функции` async` - PullRequest
1 голос
/ 28 сентября 2019

Javascript await выдает следующую ошибку, когда я жду внутри async модуля

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 } }]

1 Ответ

0 голосов
/ 28 сентября 2019

Проблема со вторым фрагментом состоит в том, что функция 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));

Как только предложение верхнего уровня await приземлится , вы сможете просто ждать main.

...