Мне нужно перебрать все модели в коллекции Книжная полка, вычислить некоторую информацию, а затем сохранить эту информацию в каждой модели. Очень важно, чтобы я делал это в одной транзакции, для откатов от ошибок.Как обрабатывать и обновлять все модели в коллекции, в одной транзакции, с книжной полкой?
Проблема, с которой я сталкиваюсь, - это единственный способ, которым я действительно могу это сделать, - это Promise.map
(Bluebird), но коллекцию книжной полки нельзя передать на карту. Например, это не работает (Thing
является модель, Promise
является Блюберд обещание):
Bookshelf.transaction(function (t) {
return Thing.fetchAll({transacting:t}).then(function (things) {
return Promise.map(things, function (thing) {
return thing.save({
value: computeSomeValueSync(thing)
}, {
transacting: t
});
});
});
}).tap(function() {
console.log("update complete");
});
Поскольку things
не могут быть переданы Promise.map
, и не кажется, что будет что-нибудь в API Bookshelf который может получить массив моделей из коллекции ...
Как это сделать?