私は物事を行うには、通常の方法は、DynamoDB APIノードを使用すると、結果を同期的に取得できますか?
db.query(params, callback);
しかし、どのようにして、私は結果を得る前に、私のラムダの残りの部分が実行できない場合、私は
var data = db.query(params);
ような何かを行うことができている知っていますすべてのコールバックを持たずに待っていますか?
私は物事を行うには、通常の方法は、DynamoDB APIノードを使用すると、結果を同期的に取得できますか?
db.query(params, callback);
しかし、どのようにして、私は結果を得る前に、私のラムダの残りの部分が実行できない場合、私は
var data = db.query(params);
ような何かを行うことができている知っていますすべてのコールバックを持たずに待っていますか?
Query apiの同期方法はありません。ただし、クエリAPIにはPromise
を使用できます。
プロミスは、 非同期フローを管理するためのコールバック関数を使用する代わりの方法を提供します。非同期呼び出しを変数 として扱うことができ、エラー処理が簡素化され、非同期呼び出しの結果を処理する上でより大きな制御が提供されます。クエリAPIを使用して
サンプルコード: -
var table = "Movies";
var year_val = 1992;
var title = "Movie with list attribute";
var params = {
TableName: table,
KeyConditionExpression: 'yearkey = :hkey and title = :rkey',
ExpressionAttributeValues: {
':hkey': year_val,
':rkey': title
}
};
var queryObjectPromise = docClient.query(params).promise();
queryObjectPromise.then(function (data) {
console.log("Query Item succeeded: ", JSON.stringify(data,
null, 2));
}).catch(function (err) {
console.log("Unable to read item. Error JSON: ", JSON.stringify(err, null, 2));
});
私のPOVからは、インデントの少ない同じようなものです。しかし、私はこれを受け入れます。 – LLL
ノードv7.6では、指定したクエリメソッドのpromisifiedバージョンでasync-awaitとawaitを使用できます(インデントを一切加えないでください) – johni
ありがとう!良い提案。ただし、ほとんどのユーザーにとってはノードv6.10.2 LTSが推奨バージョンです。 – notionquest
いいえ、Node.jsの持つプログラミングは非同期コードに対処する方法を学ぶために有することを意味します。 – robertklep