javascript - Angular 异步调用的计时问题

标签 javascript angularjs asynchronous promise

我在使用 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/

相关文章:

javascript - 覆盖 browserify require()

javascript - 移动谷歌地图 v3

javascript - 我的表情有什么问题吗?

javascript - 如何从 Angular 表单返回 Django?

javascript - 在返回另一个函数的回调后调用一个函数

node.js - 返回 POST 请求响应后运行方法

java - Spring 与 Callable 异步如何工作以及我不明白的地方?

javascript - 如果是移动设备则更改背景图片

javascript - 如何修复我的书签本地存储服务

javascript - 抛出自定义错误时触发 $stateChangeError