关于async 返回值的问题
发布于 2个月前 作者 hc2014 290 次浏览 来自 问答

用async控制 数据库的查询,查询会很多 彼此之间有的有依赖关系有的没有,所以我再用的时候分了几个方法

exports.addTest=function(){
   async.waterfall([
    //balabala的  这里是一大堆 查询
    //最后调用其他函数
    add()
   ])
}

function add(){
async.waterfall([
        function(cb) {
            //一个查询
        },
        function(n, cb) {   
             var results=HasRejectedTests(n,type,origrec)//这个地方取不到 HasRejectedTests的返回值
             console.log("res:"+results)
             cb(null,results);
        }
    ], function(err, results) {
        console.log(results)
    });
}

function HasRejectedTests(){
   async.series([
   //又是一大推查询
   ],function(err, results) {
      **想在这里返回数据 但是不能返回**
   }))
}

大概就是这样的结构, 我想在HasRejectedTests 中返回一个值给add(), 但是返回的是空,不知道怎么搞,懂的前辈 给讲解讲解呗

10 回复

@alsotang 看起来不错,稍后再去仔细看看,那,就async而言 在async的方法最后的function(err,results){}中 是可以直接console.log()出值的,但是为什么不能return 一个值呢? 有没有方法解决下的?

异步编程,用Callback啊 function HasRejectedTests(callback){ async.series([ //又是一大推查询 ],function(err, results) { 想在这里返回数据 但是不能返回 ** callback(results);** })) }

async里面相对外部也是异步吧,你想办法把外面的挪到里面呗。

@pockry 一直都在尝试这样弄,妈蛋 查询太多了 目前就写了十来个了,还有差不多十来个…

@Icego 给你点个赞,这种方法是可行的。但是呢?用一个问题,本来用asycn 就行想控制异步,把杂乱的深沉度嵌套 写的更优雅,更美观, 这样一搞,又写回去了。o(╯□╰)o

@hc2014 哈哈,你用async.waterfall,其实就可以达到目的的,前一个函数的输出作为下一个的输入,再好好研究研究吧!

@Icego 诶,三五个查询用这个解决当然不错。我这里一个功能十几二十个查询 用这个来写在一个方法里面 太过于拥挤了。 而且 这些、 sql查询里面很多是没有依赖关系的 但是又有一些有依赖关系, 所以我才把他们分开来写。待会再去琢磨琢磨

这时候eventproxy稍微比async好一点,这两者的API很有点不一样。

回到顶部