首页 > 解决方案 > Node.js - 想要在循环中对一个方法进行 5 次并行调用

问题描述

我在 MongoDB 集合中有 1000 个信息文件。我正在编写一个查询来获取 1000 条记录,并且在一个循环中,我正在调用一个函数来将该文件下载到本地系统。因此,下载所有 1000 个文件是一个顺序过程。

我希望在下载过程中有一些并行性。在循环中,我想一次下载 10 个文件,这意味着我想调用下载函数 10 次,完成 10 个文件下载后我想下载接下来的 10 个文件(这意味着我需要调用下载函数 10 次)。

我怎样才能实现这种并行性,或者有没有更好的方法来做到这一点?

我看到了Kuenpm,但是如何实现呢?顺便说一句,我是从 FTP 下载的,所以我使用basic-ftpnpm 进行 ftp 操作。

标签: node.jsexpressasync.jskue

解决方案


异步库对此非常强大,一旦您了解了基础知识,也非常容易。

我建议您使用eachLimit,这样您的应用就不必担心以十个为一组循环,它只会同时下载十个文件。

var files = ['a.txt', 'b.txt']
var concurrency = 10;

async.eachLimit(files, concurrency, downloadFile, onFinish);


function downloadFile(file, callback){

  // run your download code here
  // when file has downloaded, call callback(null)
  // if there is an error, call callback('error code')

}

function onFinish(err, results){

  if(err) {
    // do something with the error
  }

  // reaching this point means the files have all downloaded

}

异步库将downloadFile并行运行,向每个实例发送列表中的一个条目files,然后当列表中的每个项目完成时,它将调用onFinish.


推荐阅读