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) первой функции проверки ошибок?Что вызвало ошибку?Что случилось с «концом кода»?

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос