gpt4 book ai didi

javascript - Angular promises - 分别链接 reject 和 resolve channel

转载 作者:行者123 更新时间:2023-11-30 08:29:02 24 4
gpt4 key购买 nike

情况

如果我这样做:

cookFood().then(function(food) {
eatFood(food);
});

无论 cookFood 是 reject 还是 resolve,eatFood 都会被执行。我不希望这样,因为我希望它只在它解决时执行,因为这是它的目的,而不是为了处理错误。另外,如果我这样做:

cookFood().then(function(food) {
return eatFood(food);
}, function() {
console.error('Error coooking food');
return 'FOOD_ERROR';
}).then(function(food) {
return shitFood(food);
}, function(err) {
if (err === 'FOOD_ERROR') {
alert('Looks like there was an error cooking food...');
}
});

我永远不会收到警报,因为我之前执行过错误处理程序。我不想要那个,因为我想同时执行两者。此外,如果出现错误,将调用“shitFood”。

解决方案

我知道这两种情况的解决方案。我只是认为“必须有更好的方法”。

第一个:

cookFood().then(function(food) {
eatFood(food);
}, angular.noop);

现在 eatFood 不会用不是食物的东西调用。但是我是否每次不想处理错误时都必须使用 angular.noop(因为我将在链的后面这样做)?

第二个:

cookFood().then(function(food) {
return eatFood(food);
}, function() {
console.error('Error coooking food');
return $q.reject('FOOD_ERROR');
}).then(function(food) {
return shitFood(food);
}, function(err) {
if (err === 'FOOD_ERROR') {
alert('Looks like there was an error cooking food...');
}
});

这如我所料,但我认为我不需要手动拒绝,因为值处理程序不必手动解析。

大多数情况下,我想澄清我可能有的任何误解,并了解更好的方法来做到这一点。谢谢。

最佳答案

If I do cookFood().then(eatFood);, whether cookFood rejects or resolves, eatFood will be executed.

不,那不是真的。 eatFoodcookFood 完成时执行。您不必传递 noopnull 或其他东西作为拒绝处理程序来获得该行为。

cookFood().then(function(food) {
return eatFood(food);
}, function() {
console.error('Error coooking food');
return $q.reject('FOOD_ERROR');
}).then(…);

This works as I expect, but I think I shouldn't need to manually reject, because the value handler does not have to manually resolve.

是的,如果您想发出结果信号,您总是需要手动返回一个值。这是一个普通值、一个将实现的 promise 还是一个被拒绝的 promise 取决于所需的行为。

但是你不必返回被拒绝的 promise ,你也可以只抛出一个异常:

cookFood().then(eatFood, function() {
console.error('Error coooking food');
throw new Error('FOOD_ERROR');
}).then(…);

关于javascript - Angular promises - 分别链接 reject 和 resolve channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40753074/

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