for循环请求数据接口,for循环出不同的值,作为请求接口的参数。这种请情况怎么处理?否则接口还没请求完成,for循环就已经执行完了
方法一:let i=0
方法二:
for(var i=0;i<bb.length;i++){
(function (arg) {
aa.push(
{
text: http.....bb[arg]
}
)
})(i);
}
1.简单点使用es6的let解决。
2.不支持es6的话用闭包。
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
关于对异步处理的理解,可以参考从小小题目逐步走进 JavaScript 异步调用
但是上面这个 main 必须要每个 bb 的调用都成功才会返回也就是说,对于 Promise.all,如果有一个失败,必定全部失败。那么可以这样改写(参阅从不用 try-catch 实现的 async/await 语法说错误处理):
这样,如果有调用失败,aa 中对应的元素就是
false
,当然你也可以使用其它容易识别的值,比如null
、undefined
或者某个特殊值,甚至可以干脆对返回值进行一次封装这样,aa 中的每个元素都是一个对象,要么有
data
属性,要么有err
属性……