【发布时间】:2020-01-28 05:20:42
【问题描述】:
当我在 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)
这是我的代码 sn-p。我做错了什么?
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 } }]
【问题讨论】:
-
运行你的 sn-p,它会给出一个 ReferenceError(运行时),而不是一个 SyntaxError - 语法看起来不错。 (可能您的环境不支持
await,需要更改配置或升级?) -
@CertainPerformance 它被标记为
node.js,它可能不打算在浏览器中运行。并且回溯表明错误是在导入文件时发生的,而不是在尝试运行函数时发生的。 -
@CertainPerformance 如果我在异步 IIFE
(async function() {})();中运行该函数,那么它不会给出错误,但我需要 await 结果在一个变量中,并且 IIFE 限制了范围。 -
你在哪个版本的 node.js 中运行它?
-
@Bergi 这是 v8.9.4
标签: javascript node.js promise async-await