gpt4 book ai didi

javascript - Nodejs - SolrClient,如何等待响应

转载 作者:行者123 更新时间:2023-12-03 11:34:47 25 4
gpt4 key购买 nike

我有一个关于nodejs的solr-client模块的问题。我正在使用这个模块来查询 solr-index。

只要我不必等待查询完成并且只要我只需要结果作为异步结果,模块本身就可以正常工作。

但目前我不知道如何等待搜索请求完成并按顺序使用结果。

我的经理有以下方法

SolrManager.prototype.promisedQuery = function(query, callback) {
var solrClient = solr.createClient(this.configuration.cores.page);

var docs = null;
var finished = false;
var deferred = Q.defer();

var request = solrClient.search(query, function(err,obj){
if (!err) {
if (obj.response.numFound > 0) {
deferred.resolve(obj.response.docs);
} else {
deferred.resolve(null);
}
} else {
deferred.reject(err);
}
});

var records = null;
var promise = deferred.promise;
promise.then(function(result) {
records = result;
}).fail(function(error){
records = error;
});

return records;

};

这里的问题是,我尝试等待查询结果并将其用作“promisedQuery”的返回值。

我几天来一直尝试在顺序调用中使用此方法,还尝试使用不同的附加模块,如“wait.for”、“q”等,但似乎没有任何效果。

solr-client 的回调函数总是在 manager-method 返回后执行。此外,在从管理器方法返回后,甚至还会调用 promise 方法。

有人可以帮助我解决该主题或提供一些提示,我如何等待 solr-client-search 操作的响应,然后按顺序返回?

感谢您的帮助。

乌多·格哈兹

最佳答案

一个多星期以来,我似乎找到了解决方案:

SolrManager.prototype.promisedQuery = function(query, callback) {
var solrClient = solr.createClient(this.configuration.cores.page);

var docs = null;
var deferred = Q.defer();

var request = solrClient.search(query, function(err,obj){
if (!err) {
if (obj.response.numFound > 0) {
deferred.resolve(obj.response.docs);
} else {
deferred.resolve(null);
}
} else {
deferred.reject(err);
}
});

return deferred.promise;
};

在所有其他管理器中,调用上述函数:

...
var dbPromise = this.solrManager.promisedQuery(query);

var _self = this;
return Q.async(function*(){
var result = yield dbPromise;
return result;
});
...

经过第一次测试,同步方法似乎会等到 Promise 解决为止。

唯一的事情是,它只能在 NodeJs 版本 0.11.10 上运行,该版本支持生成器函数,并激活 --harmony-flag 和“q”-module。

致以诚挚的问候

乌多

关于javascript - Nodejs - SolrClient,如何等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26566535/

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