【问题标题】:Intentionally fail an angular promise if some conditions are met?如果满足某些条件,是否故意使角度承诺失败?
【发布时间】:2015-11-22 04:44:18
【问题描述】:

如果我有一些像这样的链式 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;
});

我想修改代码,以便在某些情况下承诺失败,假设如果这个 'then' 函数得到 result==0 ,那么我认为这是一个错误场景。我实际上希望这会出错。

为了使这个承诺失败,我能做些什么,引发异常就足够了,还是我需要以更具体的方式发出失败信号?

【问题讨论】:

  • 你看过 defer() 方法吗?这使您可以使用 resolve()/reject() 更好地控制结果

标签: javascript angularjs coffeescript


【解决方案1】:

你可以注入$q服务,调用$q.reject()Read The Documentation

promiseB = promiseA.then(function(result) {
    if (result==0) {
        return $q.reject(result);
    }
    return result + 1;
});
【解决方案2】:

试试这个:

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

【讨论】:

    【解决方案3】:

    来自本页的 Promise API 部分:https://docs.angularjs.org/api/ng/service/$q

    此方法返回一个新的 Promise,它通过 successCallback 的返回值 errorCallback 被解析或拒绝(除非该值是一个 Promise,在这种情况下,它通过使用 Promise 链接在该 Promise 中解析的值来解析) .它还通过 notifyCallback 方法的返回值进行通知。无法通过 notifyCallback 方法解析或拒绝承诺。

    所以看起来基本上你只需要在你的回调函数中返回 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;
    });
    

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多