Bluebird:在一个循环中链接 .then 处理程序
Bluebird: chain .then handlers in a loop
问题:如何将getNextPaymentPayload/makePayment/confirmPayment
链接成一个循环?您始终可以使用 hasAnyPayments
方法检查是否还有任何付款。
问题: 您不能并行付款。要进行付款,您需要等待前一个付款完成。
示例:
SomeService
//first payment
.getNextPaymentPayload()
.then(paymentPayload => this.makePayment(paymentPayload))
.then(paymentResponse => this.confirmPayment)
//second payment
.then(SomeService.getNextPaymentPayload())
.then(paymentPayload => this.makePayment(paymentPayload))
.then(paymentResponse => this.confirmPayment)
//so on...
假设 hasAnyPayments
将 return 一个最终解析为布尔值的 Promise:
let doPayments = () => {
return hasAnyPayments().then((hasAny) => {
if (!hasAny) {
return Promise.resolve(); // all done
} else {
return SomeService.getNextPaymentPayload()
.then(paymentPayLoad => this.makePayment(paymentPayLoad))
.then(paymentResponse => this.confirmPayment(paymentResponse))
.then(doPayments); // "recurse"
}
}
}
问题:如何将getNextPaymentPayload/makePayment/confirmPayment
链接成一个循环?您始终可以使用 hasAnyPayments
方法检查是否还有任何付款。
问题: 您不能并行付款。要进行付款,您需要等待前一个付款完成。
示例:
SomeService
//first payment
.getNextPaymentPayload()
.then(paymentPayload => this.makePayment(paymentPayload))
.then(paymentResponse => this.confirmPayment)
//second payment
.then(SomeService.getNextPaymentPayload())
.then(paymentPayload => this.makePayment(paymentPayload))
.then(paymentResponse => this.confirmPayment)
//so on...
假设 hasAnyPayments
将 return 一个最终解析为布尔值的 Promise:
let doPayments = () => {
return hasAnyPayments().then((hasAny) => {
if (!hasAny) {
return Promise.resolve(); // all done
} else {
return SomeService.getNextPaymentPayload()
.then(paymentPayLoad => this.makePayment(paymentPayLoad))
.then(paymentResponse => this.confirmPayment(paymentResponse))
.then(doPayments); // "recurse"
}
}
}