如果满足某些条件,就故意违背一个有棱角的承诺

Intentionally fail an angular promise if some conditions are met?

本文关键字:一个 承诺 满足 条件 违背 故意 如果      更新时间:2023-09-26

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