0
的順序執行
我已經實現像無極
return new Promise(function(resolve, reject) { //logic });
- cart.getBasket(REQ)
- cart.updateBasket(REQ)
- cart.updateDefaultShipment(REQ)
- 以下承諾函數cart.getBasketObject(basket)
當前我執行co去使用
app.post('/Billing', function(req, res) {
cart.getBasket(req).then(function(basket) {
cart.updateBasket(req).then(function() {
cart.updateDefaultShipment(req).then(function(basket) {
cart.getBasketObject(basket).then(function(basketObj) {
res.render('billing', {
basket: basketObj
});
});
});
});
}).catch(function(error) {
console.log(error);
});
});
我讀到Promise.each
,並用它作爲我的邏輯流程的思想必須是連續的,但是當我用Promise.each
預期這是行不通的,因爲我看到每一個承諾的是inner function of each
回報價值執行。
app.post('/Billing', function(req, res) {
var asyncCalls = [cart.getBasket(req), cart.updateBasket(req), cart.updateDefaultShipment(req), cart.getBasketObject(basket)];
Promise.each(asyncCalls, function(basketObj){
res.render('billing', {
basket: basketObj
});
});
});
那麼,有沒有可以達到什麼樣的正與.then
鏈即做有一個更清潔鏈中的任何清潔的方式。
另外,是否有可能在順序承諾執行中,下一個promise函數獲得之前執行的promise的返回值。
PS:Promise數組的長度會事先知道。
http://bluebirdjs.com/docs/api/promise.reduce.html –
爲什麼不讓扁平鏈條?應該不需要嵌套的承諾。 'cart.getBasket(req).then(cart.updateBasket.bind(undefined,req).then(cart.updateDefaultShipment.bind(undefined,req))''你不必使用綁定,也可以使用annon函數。 – ste2425