gpt4 book ai didi

angularjs - 你能在返回之前解析 angularjs 的 promise 吗?

转载 作者:行者123 更新时间:2023-12-03 04:33:15 25 4
gpt4 key购买 nike

我正在尝试编写一个返回 promise 的函数。但有时所请求的信息可以立即获得。我想将其包装在一个 promise 中,这样消费者就不需要做出决定。

function getSomething(id) {
if (Cache[id]) {
var deferred = $q.defer();
deferred.resolve(Cache[id]); // <-- Can I do this?
return deferred.promise;
} else {
return $http.get('/someUrl', {id:id});
}
}

并像这样使用它:

somethingService.getSomething(5).then(function(thing) {
alert(thing);
});

问题是回调不会针对预先解决的 Promise 执行。这是合法的事情吗?有没有更好的方法来处理这种情况?

最佳答案

简短回答:是的,您可以在返回 AngularJS promise 之前解析它,它会按照您的预期运行。

来自JB Nizet's Plunkr但重构为在最初要求的上下文中工作(即对服务的函数调用)并在现场实际工作。

服务内部...

function getSomething(id) {
// There will always be a promise so always declare it.
var deferred = $q.defer();
if (Cache[id]) {
// Resolve the deferred $q object before returning the promise
deferred.resolve(Cache[id]);
return deferred.promise;
}
// else- not in cache
$http.get('/someUrl', {id:id}).success(function(data){
// Store your data or what ever....
// Then resolve
deferred.resolve(data);
}).error(function(data, status, headers, config) {
deferred.reject("Error: request returned status " + status);
});
return deferred.promise;

}

Controller 内部......

somethingService.getSomething(5).then(    
function(thing) { // On success
alert(thing);
},
function(message) { // On failure
alert(message);
}
);

关于angularjs - 你能在返回之前解析 angularjs 的 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555472/

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