首页 > 解决方案 > nodejs并行运行两个函数

问题描述

我需要在 Node JS 中并行运行两个任务,就像我们在 Java 中生成两个线程一样。我查看了所有与 promise 和 async/await 相关的文档。

我经历了以下线程

Node.js 中的并行函数调用 Promise.all 的并行操作?

即使我使用 promise.all,代码也会按顺序执行。

但我找不到这样做的方法。我看到 http.get 在后台执行,一旦结果可用,就会在回调中返回响应。在那之前,我可以做一些其他的任务。我可以做这样的事情来在我自己的代码中实现并行性。

我有以下代码。我想确保 func1 和 fucn2 并行运行

我期待按以下顺序输出

calling func1
calling func2
called all functions
promise 1 done!
promise 2 done!

这是我的代码

function func1() {

  let promise = new Promise((resolve, reject) => {
    try {
    for(var q=0;q<10000;q++) {
        console.log(q);
    }
    resolve("promise 1 done!")
    } catch(e) {
    reject(e);
    }
  });
  return promise;
}

function func2() {

  let promise = new Promise((resolve, reject) => {
    try {
    for(var r=0;r<10000;r++) {
        console.log(r);
    }
    resolve("promise 2 done!")
    } catch(e) {
    reject(e);
    }
  });
  return promise;
}


function func() {
    console.log("calling func1");
    var promise1 = func1();

    console.log("calling func2");
    var promise1 = func2();

    console.log("called all functions");
    //do some other task

    promise1
.then(result => { console.log("Promise 1 : "+result); })
.catch(error => { console.log("Promise 1 err : "+error ); });

    promise2
.then(result => { console.log("Promise 2 : "+result); })
.catch(error => { console.log("Promise 2 err : "+error ); });
}

func();

简而言之,我怎样才能使两个 for 循环并行执行。

在Node JS中是否可能。我错过了什么吗?

标签: node.jsconcurrency

解决方案


您可以使用Promise.all. 例子:

var promise1 = func1();
var promise2 = func2();

Promise.all([promise1, promise2])
  .then(results => console.log(results)); // [promise1Result, promise2Result]

如果您希望承诺一个接一个地解决,您可以这样做:

func1().then(result1 => {
  // do something with the result
  return func2();
})
.then(result2 => {
  // do something with the result
})
.catch(err => console.log(err));

推荐阅读