如果满足某些条件,就故意违背一个有棱角的承诺
Intentionally fail an angular promise if some conditions are met?
如果我有一些像这样的链接Angular承诺:
promiseB = promiseA.then(function(result) {
if (result==0) {
// result is not allowed to be zero - this is an error
// Do something here to make this promise fail ?!?!?
}
return result + 1;
});
我想修改代码,以便在某些情况下promise失败,假设这个'then'函数得到result==0,那么我认为这是一个错误场景。我真的希望这个出错。
为了让这个承诺失败,我能做些什么,提出一个例外是否足够,或者我需要以更具体的方式发出失败的信号?
您可以注入$q
服务,并调用$q.reject()
。阅读文档
promiseB = promiseA.then(function(result) {
if (result==0) {
return $q.reject(result);
}
return result + 1;
});
试试这个:
var myPromise = $q(function(resolve, reject) {
$http.get('http://someurl').then(function(data){
reject('some reason');
//if the result is not 0 return resolve(data)
});
});
myPromise.catch(function(err){
console.log('err',err);
})
看看https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns以及
来自本页的Promise API部分:https://docs.angularjs.org/api/ng/service/$q
此方法返回一个新的promise,该promise通过successCallback的返回值errorCallback被解析或拒绝(除非该值是promise,在这种情况下,它是使用promise链接在该promise中解析的值来解析的)。它还通过notifyCallback方法的返回值进行通知。无法从notifyCallback方法解析或拒绝promise。
所以看起来基本上你只需要在回调函数中返回false,即
promiseB = promiseA.then(function(result) {
if (result==0) {
return false;
}
// Indeed I don't understand how this result + 1 is gonna be used...
return result + 1;
});
相关文章:
- 一个承诺换多个承诺-并发问题
- WinJS,从可能是异步的函数返回一个承诺,也可能不是异步的
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- 转换嵌套'对于'循环成一个承诺,为了一个承诺?嵌套承诺
- 如何通过Bluebird承诺您自己的javascript api,该api使用另一个承诺的api
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 做一些 ajax 并使用 getJSON 返回一个承诺
- 在 AngularJS 中声明一个承诺,并带有命名的成功/错误回调
- 链承诺.all 与从上一个承诺返回的数组.all.
- 如何更好地停止一个承诺链并开始另一个承诺链
- 同时循环承诺,直到另一个承诺结束
- 在angular.extend()中向变量返回一个承诺的值
- 茉莉花单元测试模拟一个承诺
- 我能不能早点结束一个承诺
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- 茉莉花测试一个承诺,然后功能
- 我可以创建一个承诺来检查变量是否设置为角度吗?
- 在 then() 中断开 for 循环 在一个承诺
- 如何触发一个承诺,然后触发第二个承诺,$q
- AngularJS 在事件中返回一个承诺