【发布时间】:2015-12-22 12:02:17
【问题描述】:
我在每次循环迭代中运行一个函数,但是我需要确保在下一次迭代运行之前收到回调(成功)。当我运行下面的代码时,它会运行循环,然后控制台会显示所有回调结果。
var getExerciseImages = function(exerciseImages) {
var deferred = $q.defer();
var imageColumns = [];
var imageObject = {};
for (var i = 0; i < exerciseImages.length; i++) {
var url = 'http://files.s3.amazonaws.com/medium/' + exerciseImages[i] + '.jpg'
convertImgToBase64URL(url).then(function(result) {
imageObject = {
image: result,
fit: [200, 200]
};
imageColumns.push(imageObject);
});
};
deferred.resolve(imageColumns);
return deferred.promise;
};
调用外部函数:
function convertImgToBase64URL(url, callback, outputFormat) {
var deferred = $q.defer();
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS'),
ctx = canvas.getContext('2d'),
dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
// callback(dataURL);
deferred.resolve(dataURL);
canvas = null;
};
img.src = url;
return deferred.promise;
};
如果有更好的方法,我愿意接受有关其他方法的建议?
【问题讨论】:
-
您不能等待 Javascript 中的异步结果。您必须在回调函数中执行下一步。
-
好的,你有什么好的资源可以让我按顺序执行三个函数吗?
-
看看stackoverflow.com/questions/15504921/…。它适用于 jQuery,但基本思想与泛型 Promise 相同。
标签: javascript loops callback promise