メソッドの中にPromiseを返す処理があり、 その処理の中でループの処理があります。
そのループの中でデータベースに登録をし、その結果作成したbookデータのIDを取得し、peopleオブジェクトにマージしたいと思っています。
理想は①、②、③と順に処理を行って欲しいのですが、②は非同期で①、③となった後に②の処理が呼ばれます。 Promiseの処理の中のループ処理の中で再度Promiseを使って同期的に値を取り出したい場合、どういうPromiseを書けばいいのでしょうか? お知恵をお貸しください。

update: function(items) {
  return new Promise(function(resolve, reject) {
    knex.transaction(function (t) {
      Promise.bind(result).then(function() {
        return 処理1
      }).then(function() {
        return 処理2
      }).then(function() {
        var promises = items.map(function (item) {
          ①.. var book = _.pick(item, 'name', 'bookNumber', 'author');
          ②.. var bookId = insertBook(t, book);
          ③.. var people = _.pick(item, 'familyName', 'firstNumber', 'tel');
          var values = _.merge({}, people,  {book: bookId});
          return AModel.validateFor(values);
        });
        return Promise.all(promises);
      }).then(function(items) {
        return 処理4
      }).then(function() {
        t.commit(this);
      }).catch(t.rollback);
    }).then(function (res) {
      resolve(res);
    }).catch(function(err) {
      reject(err);
    });
  });
}

function insertBook(t, book){
  return Promise.bind(this).then(function () {
    return Book.columnizeFor(book);
  }).then(function (value) {
    return knex('book').transacting(t).insert(value, "id");
  });
}