【发布时间】:2019-05-21 10:16:02
【问题描述】:
我写了一个返回 Promise 的简单函数,所以应该是非阻塞的(在我看来)。不幸的是,该程序似乎停止等待 Promise 完成。我不确定这里有什么问题。
function longRunningFunc(val, mod) {
return new Promise((resolve, reject) => {
sum = 0;
for (var i = 0; i < 100000; i++) {
for (var j = 0; j < val; j++) {
sum += i + j % mod
}
}
resolve(sum)
})
}
console.log("before")
longRunningFunc(1000, 3).then((res) => {
console.log("Result: " + res)
})
console.log("after")
输出看起来像预期的那样:
before // delay before printing below lines
after
Result: 5000049900000
但是程序在打印第二行和第三行之前会等待。你能解释一下先打印“之前”和“之后”然后(一段时间后)结果的正确方法吗?
【问题讨论】:
-
好吧,如果你想真正测试“一段时间后”,你可以在你的 resolve(sum) 语句周围加上一个 setTimeout。
-
这行不通。您的代码只能获得一个线程。在承诺或超时中包装同步代码不会改变这一点。如果你想编写异步代码,你需要创建一个child process
-
相关:对于客户端,还有Web Worker API用于创建单独的线程任务。
标签: javascript node.js promise