gpt4 book ai didi

javascript - 服务方法无法识别外部定义的变量

转载 作者:行者123 更新时间:2023-11-28 00:18:40 28 4
gpt4 key购买 nike

这是一项服务:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com