我在使用 Angular 进行异步调用时遇到了奇怪的计时问题。
我有一个 id 数组:
set = [1,2]
我循环遍历这个集合并为每个 ID 进行异步调用:
promises = []
for id in set
d = $q.defer()
promises.push d.promise
mySvc.asyncGetObject id
.then (results) ->
console.log results, id
# results doesnt correspond with the ID
在 .then() block 中,当我期望获得 id==2 的对象时,我实际上获得了 id==1 的对象。我已经彻底追踪了这一点,但没有任何意义。我查看了网络面板 - HTTP 调用正确。我从调用中得到的结果与我在代码中得到的结果不匹配。
这可能是什么原因造成的?我过去遇到过一个问题,我试图更新一些 HTML 元素,并且必须将一两个调用包装在 setTimeout 中,否则它们将无法执行。我不知道这是否相关,但这令人沮丧。
最佳答案
循环体(在 CoffeeScript 或 JavaScript 中)不是闭包,因此当执行异步回调时,id
将具有 set
中最后一个元素的值>.
这是一个good article about this .
在您的示例中,应该执行以下操作:
promises = []
for id in set
d = $q.defer()
promises.push d.promise
do(id)
mySvc.asyncGetObject id
.then (results) ->
console.log results, id
, id
关于javascript - Angular 异步调用的计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063130/