node js + async parallel + function call方法不起作用

时间:2015-12-28 05:31:47

标签: node.js

我在不同的地方有功能。(这是常用功能,它会使用很多地方。 所以我尝试使用异步并行调用该函数,但它不起作用。 我附上了我的代码:L

var userId = 33;

async.parallel({
        video(userId, callback) {
            callback(null, callback);
        },
        video1(userId, callback) {
            callback(null, callback);
        }
    }, function(err, results) {
        console.log(results);
    });



    function video (userId, callback) {
        client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video) {
            callback(err, video);
        });

    }

    function video1(userId, callback) {
            client.query("select youtube_id,title,id,thumbnail,search_item from resource1 order by random() limit 1 ", function(err, video1) {
                callback(err, video1);
            });

        }

2 个答案:

答案 0 :(得分:0)

{fnName()}语法是函数声明。你想使用函数调用...实际上你可以使用async.parallel({video, video1}, (err, results) => console.log(results)来达到同样的效果......除了你还需要传入userId。所以你真正想要的是调用函数而不是声明它:

async.parallel([
    callback => video(userId, callback),
]);

答案 1 :(得分:0)

您需要将函数引用传递给async.parallel(),并且需要传递数组,而不是对象。您希望代码具有以下形式:

async.parallel([fn1, fn2], finalCallback);

有关您要使用的语法的具体示例,请参阅async.parallel() doc here

fn1fn2finalCallback都是async.parallel()基础架构可以调用的函数引用,而不是您自称的函数。

将您的代码更改为:

async.parallel([
    function(callback) {
        client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video) {
            callback(err, video);
        }),
    }, 
    function(callback) {
        client.query("select youtube_id,title,id,thumbnail,search_item from resource order by random() limit 1 ", function(err, video1) {
            callback(err, video1);
        });
    }
], function(err, results) {
        console.log(results);
});

据推测,您的两个数据库查询应该以某种方式不同(您的代码显示它们相同)。

如果您的函数已经在某处定义,那么您可以传递一个将调用它们的匿名函数引用。如果您的函数没有async.parallel()所需的完全相同的调用约定,则需要执行此操作。你可以这样做:

 async.parallel([function(callback) {
          video(userId, callback);
      }, function(callback) {
          video1(userId, callback);
      }], function(err, results) {
      console.log(results);
 });