Я только что внедрил 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?
Вот как я вызываю облачную функцию:
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);
})
}
И я вызываю эту функцию из onPress на RN, передавая строковый параметр, но это точно не проблема.