[英]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.