首页 > 解决方案 > Firebase 函数不会返回数据?

问题描述

我正在尝试制作一个从用户那里获取推文的 HTTPS 可调用函数。

在我的应用程序中:

const getTweets = firebase.functions().httpsCallable('getTweets');

getTweets({
    username: 'someUsername',
})
.then(res => console.log(res))
.catch(e => console.log(e));

但是没有数据返回......我得到一个空对象{data: null}

这是功能:

exports.getTweets = functions.https.onCall(async (data, context) => {
    const Twitter = require('twitter');

    const client = new Twitter({
        consumer_key: functions.config().twitter.api_key,
        consumer_secret: functions.config().twitter.api_secret_key,
        access_token_key: functions.config().twitter.access_token,
        access_token_secret: functions.config().twitter.access_token_secret,
    });

    const params = { screen_name: data.username };

    // ======== I've tried this: ======== 
    return client.get('statuses/user_timeline', params, (error, tweets, response) => {
        if (!error) {
            console.log(tweets);
        }
    });

    // ======== And this: ======== 
    client.get('statuses/user_timeline', params, (error, tweets, response) => {
        if (!error) {
            console.log(tweets);
            return tweets;
        }
    });
});

标签: javascriptfirebasetwittergoogle-cloud-functions

解决方案


似乎是一个异步问题,您可以Promise改用(https://www.npmjs.com/package/twitter#promises):

exports.getTweets = functions.https.onCall(async (data, context) => {
    const Twitter = require('twitter');

    const client = new Twitter({
        consumer_key: functions.config().twitter.api_key,
        consumer_secret: functions.config().twitter.api_secret_key,
        access_token_key: functions.config().twitter.access_token,
        access_token_secret: functions.config().twitter.access_token_secret,
    });

    const params = { screen_name: data.username };

    try {
        return client.get('statuses/user_timeline', params);
    } catch (err) {
        console.log(err);
    }
});

推荐阅读