Angularjs 带承诺的同步for循环

Angularjs 带承诺的同步for循环,angularjs,promise,Angularjs,Promise,我有下面的函数可以工作,但不是我想要的那样,因为每次迭代之前都需要迭代的结果 有很多类似的问题,但我发现很难将解决方案简化为一种模式 如何重写下面的函数,使每个循环迭代“等待”前面的一个 $scope.updateBarcode = function() { var itemcodes = $scope.itemcode.split(';'); // doc is JSPDF document, fetch will add a new page to the supplied doc.

我有下面的函数可以工作,但不是我想要的那样,因为每次迭代之前都需要迭代的结果

有很多类似的问题,但我发现很难将解决方案简化为一种模式

如何重写下面的函数,使每个循环迭代“等待”前面的一个

$scope.updateBarcode = function() {
  var itemcodes = $scope.itemcode.split(';');
  // doc is JSPDF document, fetch will add a new page to the supplied doc.
  var doc;
  //fetch will unshift the returned doc onto the supplied array.
  var result = [];
  for (var i = 0; i < itemcodes.length; i++) {
    var promise = $scope.fetch(doc, itemcodes[i],result);
    promise.then(function(){
      doc = result[0];
      if (i >= itemcodes.length) {
        doc.save(itemcodes[0] + '.pdf');
      };
    })
  };
}
$scope.updateBarcode=function(){
var itemcodes=$scope.itemcode.split(“;”);
//文档是JSPDF文档,fetch将向提供的文档添加新页面。
var-doc;
//fetch将取消将返回的文档移动到提供的数组中。
var结果=[];
对于(变量i=0;i=itemcodes.length){
doc.save(itemcodes[0]+'.pdf');
};
})
};
}

您需要将
then()
中的新承诺分配给变量,以便构建一个链:

promise = promise.then(...);

另一个问题:Javascript没有块作用域
i
不是你想象的那样。你有什么理由不想并行执行所有i/O吗?@BenjaminGruenbaum我使用的库(jsPDF)目前不支持将完整文档合并在一起。所以每次迭代之前都需要迭代的结果。@bcooper好吧,你仍然可以并行获取它们,然后只按顺序合并它们,不是吗?@BenjaminGruenbaum好主意。如果我返工其他函数,我就不会有这个问题。谢谢