Promiseの処理の中でループ処理があり、そのループ処理の中で再度Promiseを使いたい
メソッドの中に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");
});
}