前提・実現したいこと
dynamoDBのクエリをlambdaで受けとりたいです。
発生している問題・エラーメッセージ
async関数list_albumsを作りDBから値を取得することはできました。
呼び出し元に値をreturnすると[object Promise]になってしまいます。
どのようにすればreturnを正常な値として受け取れるでしょうか?
result=[object Promise]
該当のソースコード
exports.list_albums =async function(body,context){ var params = { TableName: 'albums', ExpressionAttributeNames:{ '#u': 'uniqueid'}, ExpressionAttributeValues:{ ':val_1': global.userId, }, KeyConditionExpression: '#u = :val_1' }; var result =await doQuery(params); console.log('check3='+result); return result; }; function doQuery(parameter) { return new Promise((resolve, reject) => { docClient.query(parameter, (err, data) => { if (err) { console.log('[ERROR] DynamoDB Query Error: ', err); reject(err); } else { var arrstr =''; data.Items.forEach(function(album, index){ console.log(album.title); arrstr = arrstr + album.title +"\n"; console.log('check1='+arrstr); }); resolve(arrstr); } }); }); }
//呼び出し元 var result =db_control.list_albums(body,context); console.log('result='+ result); //ここが[object Promise]になる
試したこと
呼び出し元をasyncにして、呼び出しを
await db_control.list_albums(body,context);
追記
"use strict"; var AWS = require('aws-sdk'); var contents_get = require('./get_contents'); var db_control = require('./db_control'); const crypto = require("crypto"); AWS.config.region = 'ap-northeast-1'; global.messageid; global.userId; exports.handler = async function (event, context) { let body = JSON.parse(event.body); let signature = crypto .createHmac("sha256", process.env.CHANNELSECRET) .update(event.body) .digest("base64"); let checkHeader = (event.headers || {})["X-Line-Signature"]; if (signature === checkHeader) { if (body.events[0].replyToken === "00000000000000000000000000000000") { let lambdaResponse = { statusCode: 200, headers: { "X-Line-Status": "OK" }, body: '{"result":"connect check"}', }; context.succeed(lambdaResponse); // ③接続確認エラーを確認する。 } else { body.events.forEach(function(eve) { global.messageid =eve.message.id; global.userId =eve.source.userId; if (eve.message.text === 'アルバム'){ global.userId =eve.source.userId; var result =await db_control.list_albums(body); //ここのawaitがエラーになる console.log('result='+ result); } }); } } else { console.log("署名認証エラー"); } };
としてみたのですが、これはエラー(unexpectedtoken)で通りませんでした。
回答2件
あなたの回答
tips
プレビュー