如何在递归中,操作完成才返回数据?
function formatData(err, data, pid) {
db.execSQL(
'SELECT id FROM category WHERE pid = ?',
[pid], function (err, result) {
for(var j in result) {
data.push(result[j].id)
}
if(result.length>0) {
for(var i in result){
formatData(err, data, result[i].id);
}
}
}
);
return data;
}
db.execSQL为封装的数据库操作,第一个参数是sql语句,第二个是sql参数,第三个为回调函数 如何在所有递归操作完成之后才返回数据?
7 回复
return 上移两行
1楼大神能解释下不? 感觉挺抽象的 @dayuoba
这样的结构是不行的,至少要使用 callback
var counter = 0;
function formatData(err, data, pid, cb) {
counter++;
db.execSQL(
'SELECT id FROM category WHERE pid = ?',
[pid], function (err, result) {
counter--;
for(var j in result) {
data.push(result[j].id);
formatData(err, data, result[j].id, cb)
}
if (counter == 0) {
cb(data);
}
}
);
}
formatData(null, [], 1, function(data) {
// deal with your data here
});
sorry,我没仔细读代码,
你得写流程控制,所有的任务执行完毕之后,把data传给callbak,callback(data)
用 async
promise 封装后异步控制就很简单了
callback是必须的