2

所以我知道,当对$http结果调用成功或错误时,它将在$httppromise 上调用,然后将返回原始的而不是更新的。我真的不明白为什么?!

目前,您可以编写如下内容:

$http(config)
  .success(function(data) { console.log(data); return 1; })
  .then(function (response) { 
    var msg = 'Hey, I am the original response, not 1, ';
    msg += 'and I can run even before success is completed. ';
    msg += 'This is nearly fake chaining...';
    console.log(msg);
  });

更多的编码风格,是否有充分的理由不将这里的代码替换为这个?

// The util method has been put after the return
// just as the other $http internal methods
return decoratePromise(promise);

// Util method to add method 'success' and 'error'
// to a promise. This will spread the raw respons
function decoratePromise(p) {
  p.success = function(fn) {
    return decoratePromise(p.then(function(response) {
      return fn(response.data, response.status, response.headers, config);
    }));
  };

  p.error = function(fn) {
    return decoratePromise(p.then(null, function(response) {
      return fn(response.data, response.status, response.headers, config);
    }));
  };

  return p;
}

我真的不知道如何看待这两种方法......是否有充分的理由使用它们来解决这个限制?

感谢您提供任何信息!

4

1 回答 1

0

为了“有意义”:

$http.get(...).success(function(data) { ... }).error(function(data) { ... });

在这种情况下,每个函数都需要原始$http数据,因为这些回调完全相互独立。

更多的编码风格,是否有充分的理由不将这里的代码替换为这个?

=> 您将无法执行上面的代码,因为它会破坏这种独立性。
实际上,这意味着只有在触发成功时才应该触发错误 => 完全胡说八道。

你不能像上面那样明确/明确地用常规的“低级”承诺来做这个“条件流” 。

事实上,你会这样做:

$http.get(...).then(function(data){ whenSucceed }, function(data) { whenError });

但是您会很容易注意到,这正是成功/错误代码在幕后所做的:
then(null, whenError)用于拒绝,then(data)resolve.

在我看来,使用一个而不是另一个是一个品味问题。

于 2014-07-09T00:48:52.923 回答