Ниже приведена следующая цепочка обещаний, и она кажется довольно беспорядочной (каждая функция _create
* возвращает обещание):
return new Promise(function (resolve, reject) {
_this.database.transaction(function (t) {
_this._createExternalAccount(payment, t)
.then(function (externalAccount) {
return _this._createExternalTransaction(externalAccount, payment, t)
.then(function (externalTransaction) {
return _this._createAddress(externalAccount, payment, t)
.then(function (address) {
return _this._createTransaction(address, payment, t)
.then(function (transaction) {
return _this._createGatewayTransaction(externalTransaction, transaction, payment, t)
.then(function (gatewayTransaction) {
t.commit();
resolve(bridgePayment);
});
});
});
});
})
.error(function (bridgePayment) {
t.rollback();
reject(bridgePayment);
});
});
Я знаю, что существуют функции Promise, которые я могу использовать, например, all()
и join()
, но они, похоже, запускают функции, которые я не могу выполнять, потому что для сохранения некоторых таблиц требуются поля из ранее сохраненных таблиц. Я надеюсь, что для меня есть способ сделать что-то вроде следующего, но я не могу понять, как:
Promise.all(_this._createExternalAccount(payment, t), _this._createExternalTransaction(externalAccount, payment, t), _this._createAddress(externalAccount, payment, t))
.then(function(externalAccount, externalTransaction, address) {
// do logic
});