Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8890

AWS DynamoDBをjsでいじるときに非同期処理で詰まった話

$
0
0

AWS DynamoDBをjsでいじるときに非同期処理で詰まった話

初めに

このお話は、単に私がJavaScriptの非同期処理を理解していなかっただけなので、プロの皆さんでしたら余裕で回避できる問題だと思います。

私みたいな初学者で、同じようなことに詰まっている方がこの記事を見て解決していただけたら幸いです。

私がやりたかったこと

DynamoDBのCRUD操作を関数内で行い、実行結果を戻り値として受け取る といったことをしたかったのですが、戻り値に値が入っていない状態で返されてしまいました。

// 問題のあるコードfunctiongetHoge(){lethoge;letparams={TableName:'table',Key:{"id":"01"}};documentClient.put(params,function(err,data){if(err){console.log(err);}else{console.log(data);// {}hoge=data;}});returnhoge;}exports.handler=function(event){lethoge=getHoge();console.log(hoge);// undifind}

PHPのようなノリで書いてしまったため、undifindの原因がわからずに悩みまくってましたが、ようやっと非同期処理のせいだ!って気づいたため、以下のように書き直しました

書き直した

// ちゃんと動くやつasyncfunctiongetUser(){lethoge;letparams={TableName:'table',Key:{"id":"01"}};try{// hogeにデータが入るまで待つhoge=awaitdocumentClient.get(params).promise();}catch(e){console.log(e);}returnhoge;}exports.handler=async(event)=>{lethoge=awaitgetUser();console.log(hoge);// {jsonデータが見れる!}};

はい、解決。

公式ドキュメントを見てみると、、、

DynamoDB DocumentClient get-propaty

varparams={TableName:'Table',Key:{HashKey:'hashkey'}};vardocumentClient=newAWS.DynamoDB.DocumentClient();documentClient.get(params,function(err,data){if(err)console.log(err);elseconsole.log(data);});

コールバックで書かれてるので、JS初心者には自力での解決キツイっす。。。

最後に言いたいこと

非同期むづかしい


Viewing all articles
Browse latest Browse all 8890

Trending Articles