所以我知道当在$http
结果上调用成功或错误时,它将在$http
承诺上调用,然后将返回原始版本而不是更新的版本。我真正不明白的是为什么?!
目前,您可以编写如下内容:
$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 code here?
// 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;
}
我真的不知道如何考虑这两种方法......是否有充分理由将其用于此限制?
感谢您的任何信息!
答案 0 :(得分: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
。
在我看来,使用一个在另一个上是一种品味问题。