这是一项服务:
angular.module('core').factory('ServerErrorAlert', ['toaster',
function(toaster) {
return function(errorResponse) {
toaster.pop('error', 'Error', errorResponse);
if (deferred) {
deferred.reject(errorResponse);
}
}
}
]);
我是这样调用它的:
function update(updatedTransaction, originalTransaction, updateLocal) {
var deferred = $q.defer();
updatedTransaction.$update(function() {
if (updateLocal) {angular.extend(originalTransaction, updatedTransaction);}
deferred.resolve(updateLocal ? originalTransaction : false);
} , ServerErrorAlert);
return deferred.promise;
};
调用 ServerErrorAlert 的第二个更新函数也是一项服务。我想让它返回一个 promise ,以便它可以被链接起来。
如您所见,ServerErrorAlert 只是一个便利函数。我没有在服务中定义延迟,而是希望它能够识别它。然而,事实并非如此,服务不识别延迟。
我想我只是感到困惑,因为如果我用服务的返回值(即函数定义)替换 $update 中的 ServerErrorAlert 参数,我相信它会识别延迟。为什么方法提取出来后就认不出来了?
基本上,我希望 ServerErrorAlert 处理 $resource 调用引起的所有服务器错误,但我不想继续复制并粘贴函数定义作为错误回调。相反,我希望只在其中粘贴一个单词(用于代码重用)。
我怎样才能完成我想要完成的事情?
提前致谢。
最佳答案
简单地返回一个被拒绝的 promise ,例如
.factory('ServerErrorAlert', ['$q', 'toaster', function($q, toaster) {
return function(errorResponse) {
toaster.pop('error', 'Error', errorResponse);
return $q.reject(errorResponse);
}
}]);
<小时/>
我还会改变您解决资源 promise 的方式。您实际上并不需要创建自己的延迟对象。试试这个...
return updatedTransaction.$update().then(function() {
if (updateLocal) { // assuming this is actually defined and in scope
angular.extend(originalTransaction, updatedTransaction);
return originalTransaction;
}
return false;
}, ServerErrorAlert);
关于javascript - 服务方法无法识别外部定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30227634/