【发布时间】:2016-07-27 05:03:11
【问题描述】:
以下是一个演示:
var forever = new Promise(function (resolve, reject) {
while (true) {
}
resolve("done")
});
console.log("Promise returned")
console.log("Promise returned") 永远不会被执行。似乎forever 的评估将阻塞线程并且永远不会返回。
将函数体包装成setTimeout 修复了这个问题:
var forever = new Promise(function (resolve, reject) {
setTimeout(function() {
while (true) {
}
resolve("done")
},0)
});
console.log("Promise returned")
Promise的回调参数不应该deferred被执行吗(不需要被setTimeout包裹)?有没有关于这种行为的文档?
【问题讨论】:
-
没有。如果你在 Promise 中包装一个进行 ajax 调用的函数,它会推迟通过网络进行调用吗?
-
不,没有理由推迟执行人。是的,这是记录在案的;我会寻找骗子。教训是你不应该在你的代码中放置无限循环。
-
这段代码有什么意义?创建一个永远不会解决的承诺可以很多更容易。
标签: javascript asynchronous promise ecmascript-6