Próbuję napisać ten kod z obietnicy. ale nie wiem, jak napisać obietnicę w obietnicy i pętli. Starałem się myśleć w ten sposób, ale funkcji insertBook stać się asynchronicznie. Jak mogę uzyskać bookId synchronicznie?Obietnica wewnątrz obietnicy
update: function(items, quotationId) {
return new Promise(function(resolve, reject) {
knex.transaction(function (t) {
Promise.bind(result).then(function() {
return process1
}).then(function() {
return process2
}).then(function() {
var promises = items.map(function (item) {
var people = _.pick(item, 'familyName', 'firstNumber', 'tel');
if (item.type === 'book') {
var book = _.pick(item, 'name', 'bookNumber', 'author');
var bookId = insertBook(t, book);
var values = _.merge({}, people, {quotation: quotationId}, {book: bookId});
} else {
var values = _.merge({}, people, {quotation: quotationId});
}
return AModel.validateFor(values);
});
return Promise.all(promises);
}).then(function(items) {
var insertValues = items.map(function (item) {
return People.columnize(item);
});
return knex('people').transacting(t).insert(insertValues);
}).then(function() {
return process5
}).then(function() {
...........
}).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");
});
}
Unikaj [ 'Promise' konstruktor antywzorzec projektowy] (https://stackoverflow.com/q/23803743/1048572?What-is-the-promise- konstrukcja-antipattern-i-jak-unikać-to)! – Bergi