我试图异步运行一个函数 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
我的 Node 版本是 12.19.0(根据之前的问题,它似乎必须至少是 10,所以这不应该是问题)。当我在没有等待的情况下运行该函数时,它们可以正常工作(即用户在我的系统上更新)。
似乎for循环本身也是异步的,但我担心如果同时调用太多,我的系统会阻塞API,所以我想一次进行20-50次调用,顶。
最佳答案
为了使用 await,您需要声明将 await 放入的函数为 async
例如:
const functionReturningPromise = (input) => {
return new Promise((resolve, reject) => {
if (!input) {
return reject();
}
return resolve();
});
}
const functionAwaitingPromise = async () => {
for (let i = 0; i < 20; i +=1) {
try {
await functionReturningPromise(i);
console.log(i);
} catch (error) {
console.log(error);
}
}
}
关于node.js - SyntaxError : Unexpected reserved word "await", node.js 是正确的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66158135/