【发布时间】:2017-06-21 05:26:08
【问题描述】:
下面的代码
function inner () {
new Promise(function(resolve,reject){
resolve()
}).then(function(){
console.log('Inner Promise')
})
}
function outer() {
return new Promise(function(resolve, reject){
resolve()
inner()
})
}
outer().then(function(data) {
console.log('Outer Promise')
})
输出是
Inner Promise
Outer Promise
我认为外部解析将首先进入 JS 消息队列,然后是内部解析。 然而,JS 事件循环首先触发内部解析,然后触发外部解析。
Promise resolve 在内部做什么?
【问题讨论】:
-
按照您的编码方式,
inner()是 Promise 的一个孤立分支。你只知道它什么时候开始,但它不与任何东西协调。这通常是编写 Promise 的错误方式,甚至在某些 Promise 库中是一个警告,因为它通常是一个错误。通常,您会从outer()中返回inner()承诺,而不是让outer()创建自己的承诺。然后,一切都会协调起来。 -
依赖独立promise链的顺序是一个糟糕的设计。您依赖于不受规范控制且永远不应该完成的特定承诺实现的实现细节。如果您关心两个单独的 Promise 链的顺序,那么您应该使用您的代码连接/控制它们,而不是猜测特定实现将如何运行。
标签: javascript promise