gpt4 book ai didi

angularjs - Angular 条件 promise

转载 作者:行者123 更新时间:2023-12-04 15:21:34 26 4
gpt4 key购买 nike

对于 angular 项目,我必须嵌套 promise,并且遇到不确定自己在做什么的情况。
这是我的代码之一:

return Action1().then(function (data) {
var defer = $q.defer();
if (data.condition) {
$q.all([Action2(), Action3(), Action4()]).then(function () {
defer.resolve();
});
} else {
defer.reject("error_code");
}
return defer.promise;
});

Action1、Action2、Action3 和 Action4 是工作 promise 函数。很多 promise 和行动取决于条件。
我可以这样做并确保我的主要功能将始终得到解决或拒绝吗?

我读到我们可以在 resolve 函数中传递 promise。
我可以这样做吗,这是否与上述相同:
return Action1().then(function (data) {
var defer = $q.defer();
if (data.condition) {
defer.resolve($q.all([Action2(), Action3(), Action4()]);
} else {
defer.reject("error_code");
}
return defer.promise;
});

最佳答案

不它不是。如果 Action2() 中的一个,您的第一个函数将永远挂起, Action3()Action4()做了“抛出”,并拒绝 $q.all(…) promise - 你的延迟永远不会解决。这是deferred antipattern最常见的bug你用过这里。

您的第二个功能确实减轻了这种情况,但仍然是不必要的复杂。你根本不需要在这里延期!直接返回promise,使用 $q.reject :

return Action1().then(function (data) {
if (data.condition) {
return $q.all([Action2(), Action3(), Action4()]);
} else {
return $q.reject("error_code");
}
});

或者,当这发生在 then 中时处理程序,您也可以使用 throw "error_code" .

关于angularjs - Angular 条件 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29672019/

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