当前位置:  开发笔记 > 编程语言 > 正文

如何使用lodash,underscore或bluebird同步迭代数组

如何解决《如何使用lodash,underscore或bluebird同步迭代数组》经验,为你挑选了1个好方法。

我有一个数组,每个索引包含文件名.我想一次下载一个文件(同步).我知道' Async'模块.但我想知道LodashUnderscoreBluebird库中的任何函数是否支持此功能.



1> Shanoor..:

你可以使用蓝鸟Promise.mapSeries:

var files = [
    'file1',
    'file2'
];

var result = Promise.mapSeries(files, function(file) {
    return downloadFile(file); // << the return must be a promise
});

根据您用于下载文件的内容,您可能需要构建承诺.

更新1

downloadFile()仅使用nodejs 的函数示例:

var http = require('http');
var path = require('path');
var fs = require('fs');

function downloadFile(file) {
    console.time('downloaded in');
    var name = path.basename(file);

    return new Promise(function (resolve, reject) {
        http.get(file, function (res) {
            res.on('data', function (chunk) {
                fs.appendFileSync(name, chunk);
            });

            res.on('end', function () {
                console.timeEnd('downloaded in');
                resolve(name);
            });
        });
    });
}

更新2

正如Gorgi Kosev所建议的,使用循环建立一系列承诺也是有效的:

var p = Promise.resolve();
files.forEach(function(file) {
    p = p.then(downloadFile.bind(null, file));
});

p.then(_ => console.log('done'));

一连串的承诺只会让您获得链中最后一个承诺的结果,同时mapSeries()为您提供一个包含每个承诺结果的数组.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有