等待Algolia响应,然后再返回Cloud Function

时间:2018-09-15 20:07:22

标签: javascript firebase google-cloud-functions algolia

我刚刚在后端实现了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上通过传递字符串参数来调用此函数,但这并不是肯定的问题。

1 个答案:

答案 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的结果返回(异步)。