следующий код:
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()
).
Кроме того, он создает обещание и выполняет код внутри обещания до кода, который появляется после его создания. Я ожидаю, что «возврат p1» наступит до того, как «p1 будет завершен», поскольку я предполагал, что то, что находится внутри обещания, будет выполнено на следующем тике.