【发布时间】:2021-05-15 09:28:16
【问题描述】:
我正在尝试异步运行一个函数 20 次。 我有函数定义:
import axios from 'axios';
async function updateUser (url, user) {
return new Promise((resolve, reject) => {
axios.put(url, JSON.stringify(user))
.then(response => {
//Folio returned code 204
console.log('The user has been updated');
resolve(response.data);
}).catch((err) => {
//Folio returned error
console.error(`Error Text: ${err.response.data}`);
console.error(`Error Code: ${err}`);
});
});
};
export {updateUser};
然后我尝试在外部 JSON 中遍历用户,并一次将它们更新到我的系统 20:
import {updateUser} from './updateUser.js';
import usersjson from './jsons/users.json';
let promises=[];
if (usersjson.users.length) {
try {
for (const user of usersjson.users) {
update = new promise ((resolve,reject) => {
updateUser(url, user)
.then((list) => {resolve(list)})
.catch((error)=>{reject(error)})
});
promises.push(update);
if (promises.length = 20) {
await Promise.all(promises)
.then((responses)=> {
console.log(responses);
promises=[];
}).catch((err)=> {
console.log(err);
});
}
}
} catch(err)=> {
console.log(err);
}
}
但是,我在控制台中收到一条错误消息:
await Promise.all(promises)
^^^^^
SyntaxError: Unexpected reserved word
我的节点版本是 12.19.0(根据之前的问题,它似乎必须至少为 10,所以这不应该是问题)。
当我在没有等待的情况下运行该功能时,它们可以正常工作(即用户在我的系统上更新)。 好像for循环本身也是异步的,但是我担心如果同时调用太多我的系统会阻塞API,所以我想一次调用20-50个,顶。
【问题讨论】:
-
这能回答你的问题吗? await is only valid in async function
标签: node.js arrays for-loop asynchronous async-await