node.js - 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中是否可能。我错过了什么吗?
- 阿尔比莫肯
解决方案
您可以使用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));
推荐阅读
- c# - 无法从 'System.Collections.Generic.List 转换
' 到 'System.Xml.Linq.XName' - matplotlib - 使用 Matplotlib 的麦克斯韦颜色三角形
- python - python manager dict会自动锁定它的值吗?
- sql - 无法启动 SQL Server 服务
- html - 如何自定义 HTML/CSS 水平菜单?
- database - 使用更多测量值或仅使用标签来提高性能更好吗
- .net - docker 检查不显示应用程序的 IP 地址
- java - 为什么我无法调用重绘方法?
- c# - 在 C# 中使用内部类处理套接字
- timer - 在我的湿度传感器低于 60% 后,需要帮助在我的 arduino 上创建 5 分钟计时器