2017-11-29 13 views
0

私は、ユーザーが映画を見直すことができるこのアプリを持っており、映画のポスターをつかんでレビューの横に表示する機能を追加しようとしています。私は、しかし、変数にそれを追加し、パグnode.jsアレイ内の非同期の滝

してコンパイルする> =

クエリデータベースを使用して、これを行うとポスターのURLを取得するには=>imdb IMDB IDを取得するには、映画=> imdb-idのリストを返すようにしようとしました、私はそれが動作するようにすることはできません配列は常に空の最初に何かが実行される前に戻ります。私はあなたが約束またはes2017を使用することをお勧めします私は、非同期の滝を使用しようとしましたが、私はどのように返される配列をループに把握することはできませんし、URL

async.waterfall([ 
    function (callback) { 
     console.log('Request Id:', username); 
     var query = "SELECT title, rating, review FROM movies WHERE username = \"" + username + "\" ORDER BY title;"; 
     callback(null, query); 
    }, function (query, callback) { 
     // Run query on db 
     connection.query(query, callback); 
    }, function (rows, fields, cb) { 
     // Get array of titles 
     var rowArray = rows; 
     console.log(rowArray); 
    } 
], 
function(err) { 
    // error stuff 
}) 
+0

は、なぜあなたは約束を使用していないか、非同期は、/の代わりに待っていますか! – kentor

+0

これは非同期だが、私は約束をチェックするだろう –

+0

私はこれも非同期であることを知っているが、私は本来のasync/awaitについて言いました。私はどのノードのverison/esバージョンをターゲットにしているのかわからないので、それをまったく使用できるかどうかはわかりません。コードをもっと読みやすくするために、私はあなたにそれを使用することをお勧めできます。 – kentor

答えて

1

を取得するためにIDを渡します代わりにasync/await。

サイドノート:あなたの非同期ウォーターフォールの最初のブロックは、とにかく同期していて、そこで長時間の操作を実行しません。あなたはそれにconnection.queryの行をマージすることができます。非同期で

/あなたのコードは次のようになります待っています:

async function sendQuery() { 
    console.log('Request Id:', username); 
    const query = "SELECT title, rating, review FROM movies WHERE username = \"" + username + "\" ORDER BY title;"; 

    try { 
    const rows = await connection.query(query); 
    console.log(rowArray); 
    } catch(err) { 
    console.log(err); 
    } 
}