angular 异步调用的计时问题
Timing issues with angular asynchronous calls
我在使用 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() 块中,当我期望得到 id==2 的对象时,我实际上得到的是 id==1 的对象。我已经对此进行了彻底的追踪,但没有任何意义。我查看了网络面板 - 正确进行了 HTTP 调用。我从调用中获得的结果与我在代码中获得的结果不匹配。
这可能是什么原因造成的?我过去遇到过一个问题,我试图更新一些 HTML 元素,我不得不在 setTimeout 中包装一两个调用,否则它们不会执行。我不知道这是否相关,但令人沮丧。
循环体(在 CoffeeScript 或 JavaScript 中)不是闭包,因此当执行异步回调时,id
将具有 [=12= 中最后一个元素的值].
在您的示例中,应该遵循以下原则:
promises = []
for id in set
d = $q.defer()
promises.push d.promise
do(id)
mySvc.asyncGetObject id
.then (results) ->
console.log results, id
, id
我在使用 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() 块中,当我期望得到 id==2 的对象时,我实际上得到的是 id==1 的对象。我已经对此进行了彻底的追踪,但没有任何意义。我查看了网络面板 - 正确进行了 HTTP 调用。我从调用中获得的结果与我在代码中获得的结果不匹配。
这可能是什么原因造成的?我过去遇到过一个问题,我试图更新一些 HTML 元素,我不得不在 setTimeout 中包装一两个调用,否则它们不会执行。我不知道这是否相关,但令人沮丧。
循环体(在 CoffeeScript 或 JavaScript 中)不是闭包,因此当执行异步回调时,id
将具有 [=12= 中最后一个元素的值].
在您的示例中,应该遵循以下原则:
promises = []
for id in set
d = $q.defer()
promises.push d.promise
do(id)
mySvc.asyncGetObject id
.then (results) ->
console.log results, id
, id