当我在 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/