我需要在Node JS中并行运行两个任务,就像我们在Java中生成两个线程一样。我查看了与promise和async / await相关的所有文档。
我经历了以下主题
Parallel function calls in Node.js Parallel operations with 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中使用。我错过了什么吗?
答案 0 :(得分:1)
查看async.parallel。你基本上写道:
async.parallel( [
function ( callback ) {
// Code
},
function ( callback ) {
// Code
}
], function ( error, results ) {
// Both done
} );
答案 1 :(得分:0)
您可以使用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));
答案 2 :(得分:0)
我知道这是一个老问题,但是没有人指出原始问题的代码有误。
function func() {
console.log("calling func1");
var promise1 = func1();
console.log("calling func2");
var promise1 = func2(); // <- Mistake: should be assigned to promise2 not promise1
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 ); });
}