gpt4 book ai didi

javascript - Promise 的顺序执行

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:39 28 4
gpt4 key购买 nike

我实现了以下 promise 功能,例如

return new Promise(function(resolve, reject) { //logic });
  1. cart.getBasket(req)
  2. cart.updateBasket(req)
  3. cart.updateDefaultShipment(req)
  4. cart.getBasketObject(购物篮)

目前我使用执行代码

   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返回每个 promise 执行的值。

  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 函数是否可以获取上一个已执行的 Promise 的返回值。

PS:Promise 数组长度会事先知道。

最佳答案

您可以对 Promise 进行排序,而无需不断增加嵌套,如下所示:

app.post('/Billing', function(req, res) {
cart.getBasket(req).then(function(basket) {
return cart.updateBasket(req);
}).then(function() {
return cart.updateDefaultShipment(req);
}).then(function(basket) {
return cart.getBasketObject(basket);
}).then(function(basketObj) {
res.render('billing', {basket: basketObj});
}).catch(function(error) {
console.log(error);
res.sendStatus(500);
});
});

.then() 返回一个 Promise 会自动将其链接到父 Promise,这允许您在父 Promise 上使用 .then() 处理程序,而不是使用更深的嵌套来继续序列。

这会自动将先前 Promise 的结果沿着链传递到下一个操作,但它不会将所有先前结果传递给后续 Promise。如果您需要其他先前的结果,您可以在此处查看各种方法:How to chain and share prior results with Promises

关于javascript - Promise 的顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649926/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com