gpt4 book ai didi

javascript - 连续的 promise

转载 作者:行者123 更新时间:2023-12-03 05:59:16 29 4
gpt4 key购买 nike

我需要得到四个响应的 promise ,但要做到这一点,我首先必须按顺序调用每个函数,从第一个到最后一个。您可以从我的代码中看到,我从最后一个调用的函数调用了 Promise 回调中的下一个函数。

但是代码看起来不合适,所以我需要知道是否有更好的方法来做到这一点。

有什么建议吗?

$scope.createPayment = function() {
var dados = $scope.card;
// get first promise
PagamentoMP.createToken(dados)
.then(
function(result) {
dados.token = result;
// get second promise
PagamentoMP.guessPaymentMethod(dados)
.then(
function(result) {
dados.paymentMethod = result;
// get third promise
PagamentoMP.getIssuers(dados)
.then(
function(result) {
dados.issuer = result;
// get fourth promise
PagamentoMP.getInstallments(dados)
.then(
function(result) {
dados.installments = result;
},
// error for fourth promise
function(result) {
console.log("getInstallments PAGAMENTOMP -> Failed to get the name, result is " + result);
}
);
},
// error for third promise
function(result) {
console.log("getIssuers PAGAMENTOMP -> Failed to get the name, result is " + result);
});
},
// error for second promise
function(result) {
console.log("guessPaymentMethod PAGAMENTOMP -> Failed to get the name, result is " + result);
});
},
// error for first promise
function(result) {
console.log("createToken PAGAMENTOMP -> Failed to get the name, result is " + result);
});
};

最佳答案

不要这样做,

a().then(function(result) {
b(result).then(function(result) {
c(result).then(function(result) {
console.log("done");
});
});
});

您可以在顶层链接所有 promise 。

a()
.then(function(result) {
return b(result);
})
.then(function(result) {
return c(result);
})
.then(function(result) {
console.log("done");
});

您的代码中可以使用相同的模式。

要捕获错误,如果您需要一个错误处理程序来处理链中的所有错误,请在链的末尾添加 .catch

a()
.then(function(result) {
console.log("done");
})
.catch(function(err) {
console.error(err);
});

对于每个步骤的单独错误处理程序,您可以执行以下操作:

a()
.catch(function(err) {
console.log("error in a");
throw err;
})
.then(function(result) {
return b()
.catch(function(err) {
console.log("error at b");
throw err;
});
})
.then(function(result) {
return c()
.catch(function(err) {
console.log("error at c");
throw;
});
});

每个错误处理程序都需要调用throw,以便在发生错误时它不会继续沿着链向下延伸。

关于javascript - 连续的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812667/

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