[英]Firebase Function won't return data?
我正在尝试制作一个 HTTPS Callable function 来获取用户的推文。
在我的应用程序中:
const getTweets = firebase.functions().httpsCallable('getTweets');
getTweets({
username: 'someUsername',
})
.then(res => console.log(res))
.catch(e => console.log(e));
但是没有返回数据...我得到一个空的 object {data: null}
这是 function:
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;
}
});
});
似乎是一个异步问题,您可以改用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);
}
});
可以围绕使用回调样式client.get
。 而是尝试返回Promise 。 Promise
本身就可用,无需任何额外的库:
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 };
return new Promise((resolve, reject) => {
client.get('statuses/user_timeline', params, (error, tweets, response) => {
if (error) {
// Make sure to reject to avoid leaving it hanging in case of error
return reject(error);
}
return resolve(tweets);
});
});
});
希望这会有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.