【发布时间】:2022-02-14 10:32:10
【问题描述】:
我正在尝试让一个函数调用一些代码,同时让我的主函数继续运行而不必等待它。
到目前为止它还没有工作:
function doSomething() {
return new Promise((resolve, reject) => {
if(1) {
console.log("doing something");
for(let i = 0; i < 10000; i++) {
for(let j = 0; j < 10000; j++) {
for(let k = 0; k < 100; k++) {
// Do something for a long time to check if async is working
}
}
}
console.log("finished doing something");
resolve( {"dummydata": 10} );
}
else {
reject("error!");
}
})
}
function main() {
doSomething()
.then(data => console.log(data))
.catch(err => console.error(err))
console.log("this should print before doSomething() is finished");
}
main();
这是输出:
做某事
做完一件事
这应该在 doSomething() 完成之前打印
{ 虚拟数据:10 }
为什么我的程序在等待 doSomething()?我希望它并行/异步运行。我还尝试将 main() 设为异步函数,与 doSomething() 相同,但这不起作用。
【问题讨论】:
-
因为你实际上并没有做任何异步的事情,那么你对应该发生的事情的猜测实际上是错误的......将代码包装在一个 setTimeout 中的 promise 执行器中,那么你将做一些异步的事情,不只是陈述一个错误的断言
-
Promises 是一种用于处理固有异步任务的实用程序。不是为了让代码并行运行。
标签: javascript node.js asynchronous promise