我刚刚在后端实现了algolia,并使用http函数对其进行了测试。
但是,我现在需要将Algolia的搜索与可调用函数一起使用。问题是,它在Algolia做出响应之前(由于异步)返回了(空)结果。
我知道我可能应该做出承诺并等待阿尔戈利亚回来,但是我该怎么做呢?阿尔戈利亚使用它自己的方法,我不确定如何实现承诺。
在他们的文档中,有一个有关如何等待响应的示例,但仅显示了添加或获取单个对象的方式,该对象与搜索的处理方式不同。
这是我的职能:
exports.searchDataInAlgolia = functions.https.onCall((data, context) => {
var algoliaClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY);
var ALGOLIA_INDEX_NAME = 'users';
var algoliaIndex = algoliaClient.initIndex(ALGOLIA_INDEX_NAME);
algoliaIndex.search({
query: data.textToSearch
})
.then(function (responses) {
return responses.hit;
});
})
在返回response.hit之前,如何等待algolia提取所有数据?
这就是我调用云函数的方式:
searchForUser = (textToSearch) => {
var searchDataInAlgolia = firebase.functions().httpsCallable('searchDataInAlgolia');
searchDataInAlgolia({
textToSearch: textToSearch,
}).then(function (result) {
return result.data;
//Future data manipulation/filtering
}).then(res => {
console.log(res);
})
}
我在RN的onPress上通过传递字符串参数来调用此函数,但这并不是肯定的问题。
答案 0 :(得分:0)
您还需要返回search
的结果:
exports.searchDataInAlgolia = functions.https.onCall((data, context) => {
var algoliaClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY);
var ALGOLIA_INDEX_NAME = 'users';
var algoliaIndex = algoliaClient.initIndex(ALGOLIA_INDEX_NAME);
return algoliaIndex.search({
query: data.textToSearch
})
.then(function (responses) {
return responses.hit;
});
})
在没有执行完最后一个})
的情况下函数就结束了,而不是等待Algolia的结果返回(异步)。