AWS Lambda和DynamoDB上的Node.js

编程入门 行业动态 更新时间:2024-10-07 23:18:42

AWS <a href=https://www.elefans.com/category/jswz/34/1771389.html style=Lambda和DynamoDB上的Node.js"/>

AWS Lambda和DynamoDB上的Node.js

我正在尝试创建Lambda函数以生成.js脚本(以便与Chart.JS一起使用。

此脚本将查询发送到DynamoDB中的表,并将结果输出到.js文件(存储在S3存储桶中)。

[我花了很多时间使它起作用,但是我在Node.js上遇到了经典问题:回调函数和变量作用域的顺序。

这是我使用的代码:

var AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
var s3 = new AWS.S3();

var tweetValue ;
var neutralValue ;

var destBucket = "twitterappfront1";
var ddb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

function sentimentVal(inputparams) {
    //    function resultrequest() 
    ddb.get(inputparams, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else {
        console.log("Success", data.Item);

        //Catch tweets number in DynamoTB table and store un descriptor 
        var numtweets = (JSON.parse(JSON.stringify(AWS.DynamoDB.Converter.marshall(data.Item)))).tweets ;
        var tweetsObject = Object.getOwnPropertyDescriptor(numtweets, 'N') ;
        tweetValue = tweetsObject.value ;

        console.log ("test stringify = ", numtweets) ;
        console.log (tweetsObject.value) ;
        console.log ("Value = ", tweetValue) ;
        return tweetValue ;
    }
    });
}

exports.handler = (event) => {
    // Read options from the event.

    var paramsNeutral = {
        TableName: 'twitterSentiment',
        Key: { 'sentiment':'NEUTRAL' }
    };

    // Call sentimentVal function with paramsNeutral, and setNeutralValue callback function
    // 
    sentimentVal(paramsNeutral, setNeutralValue);

    function setNeutralValue (error, tweetValue) {
        if (error) console.error('ERROR !', error) ;
        else console.log ('callback tweetValue = ', tweetValue) ;
    }
};

我的问题是,似乎从未使用过回调函数:我没有控制台输出“ ERROR”或“ Callback tweetValue =“

而且我不明白如何从sendvimentVal函数中获取值。我尝试了“返回”,但我不知道这是否是正确的方法。

您能帮我吗?

谢谢

回答如下:

您不等待DynamoDB更新完成。

更新它以返回承诺并使用异步/等待

async function sentimentVal(inputparams) {
    try {
     //    function resultrequest() 
     const data = await ddb.get(inputparams).promise()

     console.log("Success", data.Item);

     //Catch tweets number in DynamoTB table and store un descriptor 
     var numtweets = (JSON.parse(JSON.stringify(AWS.DynamoDB.Converter.marshall(data.Item)))).tweets ;
     var tweetsObject = Object.getOwnPropertyDescriptor(numtweets, 'N') ;
     tweetValue = tweetsObject.value ;

     console.log ("test stringify = ", numtweets) ;
     console.log (tweetsObject.value) ;
     console.log ("Value = ", tweetValue) ;
     return tweetValue ;
   } catch (err) {
      console.log("Error", err);
      throw err
   }
}

并在处理程序中等待它

exports.handler = (event) => {
    // Read options from the event.

    var paramsNeutral = {
        TableName: 'twitterSentiment',
        Key: { 'sentiment':'NEUTRAL' }
    };

    // Call sentimentVal function with paramsNeutral, and setNeutralValue callback function
    // 
    const tweet = await sentimentVal(paramsNeutral, setNeutralValue);

    function setNeutralValue (error, tweetValue) {
        if (error) console.error('ERROR !', error) ;
        else console.log ('callback tweetValue = ', tweetValue) ;
    }
};

我不确定setNeutralValue应该做什么。

更多推荐

AWS Lambda和DynamoDB上的Node.js

本文发布于:2024-05-07 21:45:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757396.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Lambda   AWS   DynamoDB   js   Node

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!