在循环中延迟返回异步函数

时间:2014-08-07 10:23:08

标签: javascript angularjs asynchronous

我在angularJS应用中使用pdfmake(在javascript中创建pdf的库)。 pdfmake使用异步函数来创建pdf blob。

所以我要做的是创建一个可以返回pdf blob数组的函数。我尝试了以下方法:

createMultiplePDF: function(objects) {
    var p = $q.when();

    var retObjects = [];
    angular.forEach(objects, function(pdfObject, index) {
        p = p.then(function (formerRes) {
            return pdfMake.createPdf(objects[index].pdf).getBuffer(function(slipPdfObject){
               retObjects.push(angular.copy(slipPdfObject));
            });
        });

    });
    return p.then(function(){
        return retObjects;
    });
}

但我得到一个空阵......我做错了什么?

1 个答案:

答案 0 :(得分:2)

这将是我的方法:

createMultiplePDF: function(objects) {

  var retObjects = [];
  angular.forEach(objects, function(pdfObject, index) {
      var deferred = $q.defer();      
      pdfMake.createPdf(objects[index].pdf).getBuffer(function(slipPdfObject){
        deferred.resolve(angular.copy(slipPdfObject));
      });
      retObjects.push(deferred.promise);
  });
  var pdfList = $q.all(retObjects);
  return pdfList;
}