Node.js 多次并行调用同一函数

Node.js 多次并行调用同一函数,node.js,promise,bluebird,Node.js,Promise,Bluebird,我正在尝试并行调用同一个函数,但使用不同的参数。我使用了Promise.all,但这似乎不能并行运行任务。我试着使用蓝鸟,但它仍然似乎只是按顺序执行。PFB代码片段和日志 let records = await getRecords(query); if (_.size(records) > 0) { bluebird.map(records, function (record) { return prepareFileContent(reco

我正在尝试并行调用同一个函数,但使用不同的参数。我使用了Promise.all,但这似乎不能并行运行任务。我试着使用蓝鸟,但它仍然似乎只是按顺序执行。PFB代码片段和日志

let records = await getRecords(query);
    if (_.size(records) > 0) {
       bluebird.map(records, function (record) {
            return prepareFileContent(record.MESSAGE_PAYLOAD);
        }, { concurrency: records.length }).then(function (data) {
            finalData = data;
            console.log("done");
        });            
    }


 export async function prepareFileContent(payload : string) : Promise<string>{
return new Promise<string>(function(resolve,reject){
    try{
        console.log("content generation starts");
        //logic goes here
        console.log("content generation ends");
       resolve(details);          
   }
    catch(err)
    {
        log.error("Error in parsing the payload:", err);
        reject(err);
    }
});`

有人能帮助我实现同样的并行性吗?我缺少什么?

首先,node.js Javascript是单线程的。因此,没有哪两个Javascript能够真正并行运行。当人们谈到并行运行时,这只适用于具有本机代码组件的异步操作,如网络操作、文件操作等

似乎您是在一种假设下操作的,这种假设和函数(如Bluebird的
Promise.map()
启用并行操作)。只有在使用Promission(示例中的
prepareFileContent()
函数)监视的底层操作能够在Javascript解释器之外自行运行时,才会出现这种情况。但是,您向我们展示的函数
prepareFileContent()
中的代码只是Javascript,因此它无法与其他任何东西并行运行。记住,node.js运行Javascript单线程,因此它不能同时运行两段Javascript

因此,您的输出完全符合预期
bluebird.map()
遍历数组,对数组中的每个项调用回调,并从每个函数调用中收集承诺。然后,它等待完成所有承诺,并将所有解析结果收集到一个数组中


但是,每个回调都是同步的。它们没有任何异步部分,因此所有代码最终都是同步运行的。没有任何东西是并行运行的。

请将您的实际代码发布到您真正正在进行异步工作的地方。不需要将
并发:记录传递。长度作为一个选项。也可以使用
等待bluebird.map(…)
而不是调用
.then()
。还有你,谢谢你的解释。清理了这么多东西。因此,没有办法实现上述并行运行它们的要求,对吗?@Abirami-当您没有真正的异步操作时,就没有办法了。如果所做的工作真的是异步的(比如数据库查找或从文件读/写或从另一台服务器请求数据),那么这些都可以并行完成。@Abirami在JS中,通过将同步任务分配给客户端的Web工作人员和服务器端的Web工作人员,可以并行运行同步任务,但这些工具对于CPU密集型繁重任务非常有用,否则会停止同步工作流。然而,由于JS是一种事件语言,对于所有异步任务,同步地一个接一个地生成承诺(例如
Promise.all()
)并以并行方式等待它们的解决方案是非常有效的。
2018-04-16T08:47:53.095Z    content generation starts
2018-04-16T08:47:57.819Z    content generation ends
2018-04-16T08:47:57.820Z    content generation starts
2018-04-16T08:48:02.253Z    content generation ends
2018-04-16T08:48:02.254Z    content generation starts
2018-04-16T08:48:06.718Z    content generation ends
2018-04-16T08:48:06.718Z    content generation starts
2018-04-16T08:48:11.163Z    content generation ends
2018-04-16T08:48:11.163Z    content generation starts
2018-04-16T08:48:15.573Z    content generation ends
2018-04-16T08:48:15.574Z    content generation starts