首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用aws-lambda将数据插入DynamoDB

使用aws-lambda将数据插入DynamoDB
EN

Stack Overflow用户
提问于 2019-03-31 05:51:24
回答 1查看 1.9K关注 0票数 1

当尝试将一个新条目放到表中时,它会错过put函数的执行。allValues是一个数组,它返回完整的数据。每当尝试调用saveData时,它都会执行所有操作,而不是put函数。

出于某种原因,我尝试了几次,它工作得很好,但突然它不再放入条目。尝试尝试,但似乎找不到问题?可能是由异步引起的?

代码语言:javascript
复制
//Amazon sdk
let AWS = require("aws-sdk");
let db = require('database');
//Amazon config
AWS.config.update({
    region: "us-east-1",
    endpoint: "https://dynamodb.us-east-1.amazonaws.com"
});

//DynamoDb client
var docClient = new AWS.DynamoDB.DocumentClient();

//Axios will handle HTTP requests to web service
let axios = require ('axios');

//The ID of the student's data that I will download
let requestID= '*********';

//URL where student data is available
let url = '*************************';

exports.handler = async (event) => {
        //Get synthetic data
        let allValues = (await axios.get(url + requestID)).data.target;
        let allStart = (await axios.get(url + requestID)).data.start;

        for(let i = 0; i < allValues.length; i++){
            //db.saveData(i, allValues[i], allStart);
        }
        db.saveData();
};

还有我的database.js

代码语言:javascript
复制
et AWS = require("aws-sdk");

//Create new DocumentClient
let documentClient = new AWS.DynamoDB.DocumentClient();

//Returns all of the connection IDs
//module.exports.saveData = async (sId, sValue, sTime) => {
module.exports.saveData = async () => {
     let params = {
        TableName: "SynData",
        Item:{
            "synId": 66,
            "synValue": 1579.21,
            "synTime": "2019-01-01"
        }
    };
    //return documentClient.put(params).promise();
    documentClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
});
};

日志没有显示put函数的任何返回值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-31 06:33:00

saveData()async,因此它返回一个promise。你需要在上面使用await。另外,我不明白为什么您放弃了.promise()调用。使用回调是过时的,而且更加复杂。

您的代码应如下所示:

代码语言:javascript
复制
module.exports.saveData = async () => {
     let params = {
        TableName: "SynData",
        Item:{
            "synId": 66,
            "synValue": 1579.21,
            "synTime": "2019-01-01"
        }
    };
    return await documentClient.put(params).promise();
};

在您的客户端上,只需等待saveData():

代码语言:javascript
复制
for(let i = 0; i < allValues.length; i++){
   await db.saveData(i, allValues[i], allStart);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55435954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档