为什么异步防止Twitter的回调烧制而成?
我在把一些基本的节点脚本到lambda函数的过程。其中一个脚本使用Twitter的SDK来获取一些鸣叫。这实质上是如何调用的基本AWS LAMBDA锅炉板的API的例子。如果你运行这个,回调不会火,它基本上会略过twitter.get功能。不过,如果你从exports.handler功能删除异步它激发人们会如何期望。
我想我明白了异步等待,但为什么它防止回调被解雇?或许Twitter的SDK检测时,其一个异步函数,并返回一个承诺?
const Twitter = require('twitter');
exports.handler = async (event, context, callback) => {
console.log("The function started") // this line gets logged
const twitter = new Twitter({
consumer_key: process.env.consumer_key,
consumer_secret: process.env.consumer_secret,
access_token_key: process.env.access_token_key,
access_token_secret: process.env.access_token_secret
});
const params = {
screen_name: 'xxxx',
count: 10,
tweet_mode: 'extended'
};
const twitterEndpoint = 'statuses/user_timeline.json';
twitter.get(twitterEndpoint, params, function(error, tweets, response) { //this doesn't...
console.log("TWEETS", tweets, "ERROR", error, "RESPONSE", response) // this line does not log out
if (!error) {
console.log(tweets)
}else{
console.log(error, "There was an error calling twitter!")
}
});
}
回答如下:
后续的意见,我们的谈话:AWS LAMBDA一定是在你返回一个承诺,如果处理程序是一个异步函数。
尝试,如果你想使用异步处理程序promisify的twitter.get()
功能:
exports.handler = async (event, context, callback) => {
console.log("The function started") // this line gets logged
const twitter = new Twitter({
consumer_key: process.env.consumer_key,
consumer_secret: process.env.consumer_secret,
access_token_key: process.env.access_token_key,
access_token_secret: process.env.access_token_secret
});
const params = {
screen_name: 'xxxx',
count: 10,
tweet_mode: 'extended'
};
const twitterEndpoint = 'statuses/user_timeline.json';
return new Promise((resolve, reject) => {
twitter.get(twitterEndpoint, params, function(error, tweets, response) { //this doesn't...
console.log("TWEETS", tweets, "ERROR", error, "RESPONSE", response) // this line does not log out
if (!error) {
console.log(tweets)
resolve();
}else{
console.log(error, "There was an error calling twitter!")
reject();
}
});
});
}