gpt4 book ai didi

javascript - 用于按摩数据的 Angular JS 服务 promise

转载 作者:行者123 更新时间:2023-11-30 05:31:16 27 4
gpt4 key购买 nike

您好,我是 Angular 和 javascript 的新手,需要一些帮助。

我有一项服务需要聚合来自不同位置的数据。我正在构建一个子服务以从这些位置之一提取数据。该子服务需要 1) 从 REST Web 服务中检索数据,2) 稍作处理,以及 3) 将最终数据返回给调用服务。

我可以执行第 1 步和第 2 步,但在第 3 步时遇到问题。总的来说,我很难理解 promise 。是的,我已经阅读了文档,四处搜索,甚至看到了上面的卡通,仍然无法弄清楚......无论如何,这是相关代码:

app.service('advsolr',['$http',function($http) {
var DEBUG = false;
var conf = get_conf();
var solr = 'serverurl';
var res = {};
var data = {};

this.query = function(searchp) {
//Run Search
query_solr(searchp);
return data;
};


var query_solr = function(search) {
var g = 'serverurl' //works fine
if (DEBUG) { console.log(g);}

$http.get(g).then(function(response){
res = response.data; // this works
parse_search_res(); //this massages the data and sticks it in the data object
return data; //this does absolutely nothing here
});
};
}]);

主要查询方法由其他服务运行。这会查询一个 Solr 实例,获取结果并将它们整理成我想要的格式。我知道我可以在其他地方做这件事,但我想把它作为一个独立的可移植性服务,而且我只是想让它能正常工作。

所以查询方法运行了,我在那里还有一些其他的东西,但我在这个例子中把它拿出来了,因为它不会增加值(value)。它命中 query_solr,后者获取数据并使用 parse_search_res 对其进行处理,后者将其粘贴到数据全局变量中。

现在的问题是查询方法在 parse_search_res 有机会加载数据之前返回空数据。如何防止查询方法在没有数据的情况下返回?

谢谢

最佳答案

promise 的思想是你发起一些异步操作,比如 AJAX 请求,然后你返回相应的 promise 对象,消费者代码使用这个 promise 的方法来提供对 promise 状态变化的回调函数。

因此,要修复您的代码,您需要使 query_solr 返回 promise :

app.service('advsolr', ['$http',function($http) {
var DEBUG = false;
var conf = get_conf();
var solr = 'serverurl';
var res = {};
var data = {};

var query_solr = function(search) {
var g = 'serverurl' //works fine
if (DEBUG) { console.log(g);}

return $http.get(g).then(function(response){
res = response.data; // this works
return parse_search_res();
});
};

this.query = function(searchp) {
return query_solr(searchp);
};
}]);

您还需要更改 parse_search_res() 以返回按摩后的数据,而不是将其保存到“数据”变量中。

并且像那样设置了 advsolr 服务后,可以像这样使用它:

advsolr.query('something').then(function(data) {
console.log(data);
});

关于javascript - 用于按摩数据的 Angular JS 服务 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26852389/

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