使用node.js下载多个映像,并等待所有请求完成

时间:2017-09-23 10:21:18

标签: node.js download promise request

我正在尝试创建一个从远程服务器下载图像并从这些图像创建幻灯片的应用程序。我已经整理了幻灯片部分。我的代码不起作用,因为我试图在没有完全下载的情况下使用这些图像。我知道我需要使用承诺,但我无法解决它。我做错了什么,我觉得最好在这里问一个问题,而不是浪费时间来解决这个问题。

var fs = require('fs')
var request = require('request-promise');

function downloadImgs(imageurls){ //imageurls is an array of urls
    var tempar=[];
    var promises=[];
    for (var i = 0; i <=imageurls.length; i++) {
        if(typeof imageurls[i] !== "undefined"){
            img=tempfolder+i+'.jpg'; //tempfolder is a global variable
            tempar.push(img);
            prom=request(imageurls[i]).pipe(fs.createWriteStream(img));
            promises.push(prom);
        }

    }
    Promise.all(promises).then(function(data) {

        createslideshow(tempar);//create slideshow with downloaded images

    });

};

1 个答案:

答案 0 :(得分:1)

您无法链接.pipe(...).then(...),因为pipe未返回承诺。相反,您需要使用以下内容:

...
let req = request(imageurls[i]);
req.pipe(fs.createWriteStream(img));
promises.push(req);