最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

为什么异步防止Twitter的回调烧制而成?

运维笔记admin8浏览0评论

为什么异步防止Twitter的回调烧制而成?

为什么异步防止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();
      }
    }); 
  });
}
发布评论

评论列表(0)

  1. 暂无评论