angularjs – 在一个循环中传递变量以承诺

前端之家收集整理的这篇文章主要介绍了angularjs – 在一个循环中传递变量以承诺前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个循环中的承诺,我不知道如何传递一些范围变量到promise处理程序。
  1. for(var i in superarray){
  2. MyService.get(superarray[i].externalID).then(function(r){
  3. console.debug(i);
  4. });

MyService是一个工作服务,具有返回promise的get方法

  1. app.factory('MyService',function($http,$q) {
  2. return {
  3. get : function(itemID){
  4. var deferred = $q.defer();
  5. $http.get('/someresturl/'+itemID).then(function(e) {
  6. deferred.resolve(e.data);
  7. },function(reason) {
  8. deferred.reject(reason);
  9. });
  10. return deferred.promise;
  11. }
  12. });

在我的控制台中,console.debug logicaly不显示1,2,3,4,5。但是5,5,5。 (在我的超阵列有5个元素)。

我如何传递’i’值在我的承诺范围,所以我可以使用它在then()?

可能吗?

一种方法是在闭包中捕获i:
  1. for(var i in superarray) {
  2. (function(i) {
  3. MyService.get(superarray[i].externalID).then(function(r) {
  4. console.debug(i);
  5. });
  6. })(i);
  7. }

另一种方法是安排itemID作为r的属性重复:

  1. for(var i in superarray){
  2. MyService.get(superarray[i].externalID).then(function(r) {
  3. console.debug(r.itemID);
  4. });
  5. };

猜你在找的Angularjs相关文章