每个数组中的node.js异步瀑布

时间:2017-11-29 00:39:11

标签: javascript node.js

我有这个应用程序,允许用户查看电影,我正在尝试添加一个功能,从电影中抓取海报并将其显示在评论旁边。我尝试使用

执行此操作

查询数据库并返回电影列表=>  imdb-id获取IMDB ID => imdb获取海报url =>将其添加到变量并使用pug编译

但是,我无法让它工作,因为数组总是在其他任何运行之前返回空。我试过使用异步瀑布,但我无法弄清楚如何循环返回的数组,并传递ID以获取网址

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
})

1 个答案:

答案 0 :(得分:1)

我建议您使用promises或es2017 async / await代替。

附注:异步瀑布中的第一个块是同步的,并且您不会在那里执行任何冗长的操作。您可以将connection.query行合并到其中。

使用async / await,您的代码可能如下所示:

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);
  }
}