说“承诺完成时执行x”的标准方式是通过
promise.then()
.在循环外的var中跟踪当前的promise,并将每个调用与前一个promise附加
.then()
:
var saveBulkUploadSinglePacket = function(){
var lastPromise = $.when();
while (packetCount<=bulkUploadPackets.length){
lastPromise = (
lastPromise
.then(function(){
// make sure saveBulkUploadSinglePacket returns a promise
return saveBulkUploadSinglePacket(modelToSave));
})
.then(function(){
saveBulkUploadPackets.push(arguments);
packetCount++;
// return a resolved promise
return $.when();
})
);
}
lastPromise.resolve(saveBulkUploadPackets);
return lastPromise;
}
在函数的末尾,我用期望的返回值解析了最终的promise,然后返回了promise。这样你就可以打电话了
saveBulUploadSinglePacket().then(...)
等待所有承诺完成并处理结果。