【发布时间】:2019-03-07 20:54:33
【问题描述】:
以下代码:
Promise.resolve('a string')
.then(resp => {
console.log('resp from the initial promise: ' + resp)
const p0 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('finished sleeping in p0')
resolve('hello from p0')
}, 5000)
})
console.log('returning p0')
return p0
})
.then(resp => {
console.log('resp from p0: ' + resp)
const p1 = new Promise((resolve, reject) => {
console.log('p1 completed')
// resolve('another string from p1')
})
console.log('returning p1')
return p1
})
.then(res => {
console.log('resp from p1: ' + res)
})
.catch(err => {
console.error('Error: ' + err.message)
})
console.log('last statement')
当我运行它时,我得到以下输出(这对我来说没有意义)
last statement
resp from the initial promise: a string
returning p0
finished sleeping in p0
resp from p0: hello from p0
p1 completed
returning p1
首先,由于承诺p1 永远不会解决,我希望程序永远等待并且永远不会完成。事实并非如此,它完成得很好(尽管没有到达最后一个then())。
此外,它还创建了 Promise 并执行了 Promise 中的代码在创建之后的代码之前。我希望“返回 p1”在“p1 完成”之前出现,因为我认为承诺中的内容将在下一个滴答时执行。
【问题讨论】:
-
p1 永远无法解决.. 自我解释。
-
所以,呃,想想你在哪里打电话
console.log('p1 completed') -
@StevenStark 我假设如果 p1 从未解决,则承诺链将永远等待它解决。显然情况似乎并非如此,但我想要更多解释为什么会这样。在我看来,做出承诺意味着你想等到它完成,这似乎是合理的。如果它永远无法完成,为什么程序会结束?
-
为什么看起来不是这样?链条不会继续。
标签: javascript node.js promise es6-promise