我可以使用以下方法选择所有图像src:
var images = $("img");
images.each(function(i, img) {
var src = $(img).attr('src');
console.log(src);
});
res.status(200).send({"message" : "OK"});
我还可以使用以下方法从src复制一个图像:
request(src).pipe(fs.createWriteStream('photo_' + i + '.jpg')).on('close', function(){
res.status(200).send({"message" : "OK"});
});
我现在需要复制所有src的所有图像,但我不确定如何在循环中组合异步操作。
答案 0 :(得分:4)
这里有几种解决方案:
1使用promises和all
(如果您已经在使用ES6或像Bluebird这样的库)
Promise.all(images.map(function(){
return ... yourAsynchronousOperationPromise
})).then(function(){
// all done
});
现在这可以通过第一个promisifying被调用的异步函数来方便地完成。
在您的情况下,您可以使用请求包的Promise ready版本request-promise,但it's discouraged when using pipe
。
2使用基于setImmediate的循环:
(function step(){
var image = images.shift();
if (!image) return; // finished
doTheAsynchronousThing(image, function(){
setImmediate(step);
});
})();