创建成功/错误的承诺,例如ajax

时间:2014-12-25 10:10:19

标签: javascript promise

我正在试图弄清楚如何使promises与成功和错误回调一起工作,例如在ajax中。

我有以下承诺:

  var promise = new Promise(function(success, error) {
      if (true) {
         success("Stuff worked!");
      }
      else {
          error(Error("It broke"));
      }
    });
  promise.then(function(result)
  {
      console.log(result);
  }, function(err)
  {
      console.log(err);
  });

我希望它能像这样工作:

promise.success(function(response)
{
  console.log(response);
}).error(functin(err)
{
  console.log(err);
});

我想做什么?

2 个答案:

答案 0 :(得分:2)

承诺只是使用不同的术语,您的.success.error会在承诺上翻译为.then.catch

promise
    .then(function(value) {
        console.log(value);
    })
    .catch(function(err) {
        console.log(err);
    });

如果你真的想要(请不要),你可以这样做

Promise.prototype.success = Promise.prototype.success || Promise.prototype.then;
Promise.prototype.error = Promise.prototype.error || Promise.prototype.catch;

答案 1 :(得分:0)

successerror只是语法糖,与以下内容相同:

function CustomPromise(callback){
  this.promise = new Promise(callback);
}

// Success and error are merely shorthand functions 
CustomPromise.prototype.success = function(callback){
  this.promise.then(callback,null);
};

CustomPromise.prototype.error = function(callback){
  this.promise.then(null,callback);
}

// Expose the rest of the promise interface, especially `then` and `catch`

请注意,我没有扩展原生Promise原型,因为这是不好的做法。

我建议您坚持使用then(success,error),因为这已成为承诺的“标准”接口。 jQuery和其他几个库在某种程度上遵循这个。