gpt4 book ai didi

angularjs - 避免多个ajax请求angularJS

转载 作者:行者123 更新时间:2023-12-04 18:42:58 24 4
gpt4 key购买 nike

我试图避免向工厂中的服务器发出多个 ajax 请求。我已经添加了一个小的缓存服务,但是对于我的目标来说还不够:这个工厂可以在服务器响应之前被调用多次,导致向服务器生成多个请求。

为了避免这种情况,我添加了第二个 promise 对象,如果 AJAX 请求已执行且对象尚未在缓存中,则它应该等待第二个 promise 得到解决,但看起来我遗漏了一些东西。

这是我的代码:

myApp.factory('User', ['Restangular', '$q',
function (Restangular, $q) {
var userCache, alreadyRun = false;
return {
getUser: function () {
var deferred = $q.defer(), firstRun= $q.defer();

if (!userCache && !alreadyRun) {
alreadyRun = true;

Restangular.all('user').getList().then(function (user) {
console.log('getting user live ');
userCache = user[0].email;
firstRun.resolve(user[0].email);
});
} else if (!userCache && alreadyRun) {
console.log('waiting for the first promise to be resolved ');
firstRun.then(function(user) {
console.log('resolving the promise');
deferred.resolve(userCache);
});

} else {
console.log('resolving the promise from the cache');
deferred.resolve(userCache)
}
return deferred.promise;
}
};
}
]);

最佳答案

如果已经提出请求,您可以只返回原始 promise 。像这样的事情应该有效;

myApp.factory('User', ['Restangular', '$q',
function (Restangular, $q) {
var deferred = false;

return {
getUser: function () {

if(deferred) {
return deferred.promise;
}

deferred = $q.defer();

Restangular.all('user').getList().then(function (user) {
deferred.resolve(user[0].email);
});

return deferred.promise;
}
};
}
]);

也看看 Restangular documentation for caching requests

关于angularjs - 避免多个ajax请求angularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125837/

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