【发布时间】:2019-02-07 07:49:04
【问题描述】:
我正在将一些基本节点脚本转换为 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 控制台触发。当我运行函数时,
console.log("The function started")已注销,所以我知道代码正在运行。 -
这根本不是关于 twitter 开发工具包的,而是关于 AWS lambda 处理程序的。猜猜如果处理函数是异步的,AWS Lambda 会排除一个 Promise。发布有关如何承诺您的
twitter.get()使用 AWS Lambda 的异步函数的答案。
标签: javascript node.js asynchronous