我在尝试从async.forEachOf
内的查询中获取值时遇到问题,该查询根据if语句运行,因此我可以将该值传递到async.waterfall
的下一步
以下是代码:
async.waterfall([
function(callback) {
db.query('select id from topics where description = ?',
[topic], function(err, rows){
callback(err, rows);
});
},
function(rows, callback) {
var query = rows[0].id
db.query('select id, background, viewOrder, description from topics where parent = ? order by viewOrder',
[query], function(err, rows){
callback(err, rows);
});
},
function(rows, callback){
var callbackRows = rows;
async.forEachOf(callbackRows, function(row, key, callback){
var topics
console.log('rows[key].id: ', callbackRows[key].id);
if (callbackRows[key].background == 0){
var query = callbackRows[key].id
db.query('select id, background, viewOrder, description from topics where parent = ? order by viewOrder',
[query], function(err, rows){
callbackRows[key].subTopics = rows;
topics = callBackRows;
console.log('rows from async.forEach db query: ', rows);
console.log("from inside asnyc.foreach", callbackRows);
});
}
callback();
}, function(){
callback(null, topics);
console.log('forEachOf callback called');
});
// console.log(topics);
}
], function(err, topics){
console.log("from end of waterfall: ", topics);
});
我已经尝试过多种方式,我目前得到的错误是callback(null, topics)
部分的async.forEachOf
行没有定义主题< / p>
此刻写得更多太累了,我要去睡觉了。如果以后需要改进,我会看到它。与此同时,我要做的是将async.forEachOf
末尾的查询结果追加到前一个查询返回的值数组中的元素。从那里开始,我想把它放在快递中的响应对象中,在async.waterfall
的结束回调中。
答案 0 :(得分:0)
主题未定义,因为它未在函数的作用域或父函数的作用域中定义。在您的代码中,topics
在forEachOf的迭代器函数内定义。解决方案是简单地在父函数中定义主题,例如
function(rows, callback){
var callbackRows = rows;
var topics; // move the definition to here
async.forEachOf(callbackRows, function(row, key, callback){
答案 1 :(得分:0)
您不需要topics
。只需将rows
传递给回调即可。即callback(null, rows);
答案 2 :(得分:0)
在第三部分中,一旦数据查询完成,就需要调用回调,但也需要在if语句的else部分调用,以确保它总是被调用一次。
if (callbackRows[key].background == 0){
var query = callbackRows[key].id
db.query('select id, background, viewOrder, description from topics where parent = ? order by viewOrder',
[query], function(err, rows){
callbackRows[key].subTopics = rows;
topics = callBackRows;
console.log('rows from async.forEach db query: ', rows);
console.log("from inside asnyc.foreach", callbackRows);
callback();
});
} else callback();