如何在非async函数及不改扩展名的情况下使用await Promise.all()?
解决方案
首先先修正你代码里的两处小问题:
- 关键字拼写错误:
async función应该改为async function - 函数参数与调用不匹配:
download函数定义接收的是ids参数,但调用时传入的是单个id元素,建议把参数名改为id更合理,修正后的代码基础版本:
let ids = [164838, 793838] async function download(id){ // 函数逻辑....... } await Promise.all( ids.map(element => download(element)) )
接下来针对你的需求(不把await Promise.all()放入异步函数、不改文件扩展名),提供两种可行方案:
方案1:通过package.json配置模块类型
在项目根目录的package.json中添加"type": "module"字段,这样Node.js会把所有.js文件当作ES模块处理,自然支持顶级await:
{ "type": "module" }
配置完成后,直接用node 你的文件名.js运行即可。
方案2:运行时指定模块类型
如果不想修改package.json,可以在运行命令时添加--input-type=module参数,强制Node.js以ES模块模式加载当前文件:
node --input-type=module 你的文件名.js
以上两种方案都能满足你的要求,无需调整文件结构或扩展名,就能让顶级await正常工作。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

