for循环中请求数据接口-灵析社区

万码F5GTP6P0

for循环请求数据接口,for循环出不同的值,作为请求接口的参数。这种请情况怎么处理?否则接口还没请求完成,for循环就已经执行完了

阅读量:201

点赞量:0

问AI
关于对异步处理的理解,可以参考从小小题目逐步走进 JavaScript 异步调用 // 如果你用 node 的话,可以用 util.promisify 来封装 node 回调风格调用 // 或者就自己写一个 function updateTaskLastMile(...args) { return new Promise((resolve, reject) => { taskMainRepo.updatetasklastmile(...args, (err, data) => { if (err) { reject(err); } else { resolve(data); } }); }); }async function main() { const bb = []; const promises = bb.map(b => updateTaskLastMile(b)); // 这个 aa 就是你想要的 const aa = await Promise.all(promises); } 但是上面这个 main 必须要每个 bb 的调用都成功才会返回也就是说,对于 Promise.all,如果有一个失败,必定全部失败。那么可以这样改写(参阅从不用 try-catch 实现的 async/await 语法说错误处理): async function main() { const bb = []; // 注意这里加的 .catch const promises = bb.map(b => updateTaskLastMile(b).catch(err => false));// 这个 aa 就是你想要的 const aa = await Promise.all(promises); } 这样,如果有调用失败,aa 中对应的元素就是 false,当然你也可以使用其它容易识别的值,比如 null、undefined 或者某个特殊值,甚至可以干脆对返回值进行一次封装 const promises = bb .map(b => updateTaskLastMile(b) .then(data => ({ data }), err => ({ err }))); 这样,aa 中的每个元素都是一个对象,要么有 data 属性,要么有 err 属性……