node.js, bluebird, плохо контролирует путь выполнения
Я пытаюсь выучить синюю птицу; Я не контролирую исполнение, как хочу. (Этот вопрос о блюберде возник из вопроса async.js наNode.js, асинхронный модуль, параллелизм.)
Вот некоторый код, плюс то, что я ожидал получить и что я получил вместо этого.
Вопросы:
Почему функция # 3 запускается до (1) окончания функций # 1 и # 2 и (2) первой функции проверки ошибок?Что вызвало ошибку?Что случилось с «концом кода»?var Promise = require('bluebird')
function part1() {
console.log('part1 start')
return new Promise(function(resolve, reject) {
Promise.all(
[ part1a(1),
part1a(2)
])
.then(
function(err) {
if (err) console.log('part1 error after #1 and #2')
else console.log('part1 done with #1 and #2')
}
)
.then(part1a(3))
.then(
function(err) {
if (err) console.log('part1 error after #3')
else console.log('part1 done')
}
)
})
}
function part1a(i) {
console.log('part1a start #' + i)
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('part1a done #' + i)
return resolve()
}, 100)
})
}
part1()
.then(
function(err) {
if (err) console.log('outermost code reported error' + err.message)
else console.log('end of code')
}
)
Я ожидал
part1 start
part1a start #1
part1a start #2
part1a done #1 // these two could
part1a done #2 // reverse
part1 done with #1 and #2
part1a start #3
part1a done #3
part1 done
end of code
я получил
part1 start
part1a start #1
part1a start #2
part1a start #3
part1a done #1
part1a done #2
part1a done #3
part1 error after #1 and #2
part1 done
Вопросы (повторяются для удобства читателя):
Почему функция # 3 запускается до (1) окончания функций # 1 и # 2 и (2) первой функции проверки ошибок?Что вызвало ошибку?Что случилось с «концом кода»?Заранее спасибо.