SailsJS 异步瀑布函数中的嵌套回调未返回正确的值

SailsJS Nested callback in async waterfall function not returning correct value

我正在使用 SailsJS 创建一个应用程序。我有一个关于在异步瀑布和异步瀑布中使用回调的问题。

我在异步瀑布函数中有两个函数。第一个回调 return 是正确的值。第二个函数有一个嵌套回调。但是,嵌套回调的值卡在水线查找函数中,永远不会 returned 到外部函数。

你知道我如何 return 将值传递给外部函数吗?

感谢您的帮助。

myFunction: function (req,res) {
async.waterfall([
    function(callback){
        // native MongoDB search function that returns an Array of Objects
    },
    function(result, callback){
        async.each(resultAll, function (location){
            Model.find({location:'56d1653a34de610115d48aea'}).populate('location')
            .exec(function(err, item, cb){
                console.log (item) // returns the correct value, but the value cant be passed to the outer function
            })
        })
        callback(null, result);
    }], function (err, result) {
        // result is 'd'
        res.send (result)
    }
)}

当您使用 async 的 函数时,您应该在完成要执行的操作后使用回调。 例如:

async.waterfall([
    function(cb1){
        model1.find().exec(function(err,rows1){
            if(!err){
                model2.find({}).exec(function(err,rows2){
                    var arr=[rows1,rows2];
                    cb1(null,arr);
                });
            }else
                cb1(err);
        })
    },function(arr,cb2){
    /**
     * here in the array....we will find the array of rows1 and rows2 i.e.[rows1,rows2]
     * */
        model3.find().exec(err,rows3){
            if(!err){
                arr.push(rows3);
            //  this arr will now be [rows1,rows2,rows3]
            }
            else
                cb2(err);
        }
        cb1(null,arr);
    }],
    function(err,finalArray){
        if(err){
        //  error handling
        }
        else{
        /**
         * in finalArray we have [rows1,rows2] ,rows3 is not there in final array
         * beacause cb2() was callbacked asynchronously with model3.find().exec() in second function
         */
        }
    });

所以根据我的说法,你的代码应该是这样的

async.waterfall([
        function(callback){
            // native MongoDB search function that returns an Array of Objects
        },
        function(result, callback){
            async.each(resultAll, function (location){
                Model.find({location:'56d1653a34de610115d48aea'}).populate('location')
                    .exec(function(err, item, cb){
                        console.log (item) // returns the correct value, but the value cant be passed to the outer function
                        callback(null, yourData);
                        /**
                         * yourData is the data whatever you want to recieve in final callbacks's second parameter
                         * i.e. callback(null,item) or callback(null,[result,item]) or callback(null,result)
                        */
                    })
            })
        }], function (err, result) {
        // result is 'd'
        res.send (result)
    }
);

应用它,您可以在最终回调中看到您想要的内容。