在承诺中链接回调
Chaining callbacks within promises
我有一个触发 $http
请求的工厂函数。此函数本身接受成功回调和错误回调函数(successCallback
和 errorCallback
)...
var makeRequest = function(options, successCallback, errorCallback) {
$http(options)
.then(function() {
// do success things
successCallback();
}, function() {
// do error things
errorCallback();
});
};
这是处理后续回调(successCallback
和 errorCallback
)的推荐方式吗?
我的直觉是 'no',但我显然缺少一些概念上的理解...
我觉得下面的更合适
var makeRequest = function(options, successCallback, errorCallback) {
$http(options)
.then(function() {
// do success things
}, function() {
// do error things
})
.then(successCallback, errorCallback);
};
但这会调用 successCallback
,即使在 $http
请求中出现错误也是如此。
任何帮助...?
最好将 makeRequest
函数抽象为没有任何回调概念。它只是提出请求和 returns 承诺。由消费者决定如何处理这个承诺,是否订阅成功或错误回调。
var makeRequest = function (options) {
return $http(options).then(function () {
// do success things, construct data if needed to resolve promise with
return data;
}, function () {
// do error things, construct error object if needed to reject with
return $q.reject(data);
});
};
makeRequest({url: '/something', method: 'GET'}).then(function() {
// success callback
}, function() {
// error callback
});
我有一个触发 $http
请求的工厂函数。此函数本身接受成功回调和错误回调函数(successCallback
和 errorCallback
)...
var makeRequest = function(options, successCallback, errorCallback) {
$http(options)
.then(function() {
// do success things
successCallback();
}, function() {
// do error things
errorCallback();
});
};
这是处理后续回调(successCallback
和 errorCallback
)的推荐方式吗?
我的直觉是 'no',但我显然缺少一些概念上的理解...
我觉得下面的更合适
var makeRequest = function(options, successCallback, errorCallback) {
$http(options)
.then(function() {
// do success things
}, function() {
// do error things
})
.then(successCallback, errorCallback);
};
但这会调用 successCallback
,即使在 $http
请求中出现错误也是如此。
任何帮助...?
最好将 makeRequest
函数抽象为没有任何回调概念。它只是提出请求和 returns 承诺。由消费者决定如何处理这个承诺,是否订阅成功或错误回调。
var makeRequest = function (options) {
return $http(options).then(function () {
// do success things, construct data if needed to resolve promise with
return data;
}, function () {
// do error things, construct error object if needed to reject with
return $q.reject(data);
});
};
makeRequest({url: '/something', method: 'GET'}).then(function() {
// success callback
}, function() {
// error callback
});