我在不同的地方有功能。(这是常用功能,它会使用很多地方。 所以我尝试使用异步并行调用该函数,但它不起作用。 我附上了我的代码: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);
});
}
答案 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。
fn1
,fn2
和finalCallback
都是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);
});