我有下面的promise链,看起来很混乱(每个_create
*函数都返回一个promise):
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
});
p.then().then().then().then()
,而不是嵌套调用。该方法可使代码更加简洁易懂,同时不改变原有的意义。 - jfriend00.map()
,您可以传递{concurrency: N}
,以便一次只执行N
个操作。 - aarosil