我正在使用promises来调用一系列web服务,但在某些情况下,我希望在逻辑中使用重定向。问题是承诺链在重定向发生后继续执行。
以下是代码:
myfunc = function() {
return PromiseCall1()
.then(function(data){
if (condition){
$location.path(some_url); // This is a redirection with AngularJS
} else {
return PromiseCall2();
}
})
.then(function(data){
return PromiseCall3();
})
.then(function(data){
// Some other stuff here
})
};
预期的行为是:
PromiseCall1()
必须被称为condition
为真,则不必调用其他承诺,只需执行重定向condition
为false,则必须调用Promise2,然后调用Promise3。你会怎么做? 谢谢你的帮助。
答案 0 :(得分:2)
func = function () {
return PromiseCall1().then(function (data) {
if (condition) {
$location.path(some_url); // This is a redirection with AngularJS
} else {
return PromiseCall2().then(function (data) {
return PromiseCall3();
}).then(function (data) {
// Some other stuff here
});
}
});
};
答案 1 :(得分:0)
Petka的解决方案还可以。如果你想。如果你使用Maybe。
包装你的处理程序是可能的类似的东西:
var maybe = function(fn){
return function(value){
if(value === maybe.Nothing) return maybe.Nothing;
return fn.apply(this,arguments);
};
});
maybe.Nothing = {}; // unique reference
哪会让你做到
Promise.try(function(){
return 15;
}).then(maybe(function(val){
console.log("got",val);
return maybe.Nothing;
})).then(maybe(function(val){
console.log("This never gets called");
}));
这为你提供了一个显式的值钩子,表示不会继续使用may包裹的链中的任何承诺。