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

标签 node.js download promise request

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

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

    });

};

最佳答案

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

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

关于node.js - 使用node.js下载多个图像并等待所有请求完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378532/

相关文章:

ios - Swift 1.2 - 为什么我的 UIPickerView 不显示我的数据?

javascript - Promise.all 具有不同的返回类型

arrays - angular 5,如何从 promise 中返回数组?

javascript - 在中间件中访问应用程序配置

node.js - 如何通过 Javascript (node.js) 生成 Azure SAS token

node.js - 使用 NodeJs 获取输出 zip 文件的大小

使用分页集合时的 ​​Angularjs promise 链

node.js - Alexa Nodejs设备地址api

node.js - Nodejs 两条路径的区别

c# - 使用 Selenium 保存页面中的图像