async.js返回值形成最后一个函数

时间:2016-06-10 10:05:56

标签: javascript node.js async.js

我想在我的User对象中创建find方法。此函数应返回用户。但是对于这个例子,它只返回文本。

但我不知道瀑布的回报价值。

当我跑步时

console.log(User.find("575578a9f95d6de1354327ef"));

我得到了#undefined'在我的输出中,但我除了'函数找到shoud返回这个值',如果我想得到函数find shoud返回这个值'我该怎么办?我的输出上的文字

User = {
    collectionName: 'users',

    find: function(id){
        async.waterfall(
            [
            function(callback) {
                MongoClient.connect('mongodb://127.0.0.1:27017/lingogo', function(err,db) {
                    if(err) { throw err}
                    callback(null, db, id);

                });
            },
            function(db,id, callback) {
                var collection = db.collection(User.collectionName);
                collection.find({'_id': ObjectID(id)}).toArray(function (err, result) {

                    if (err) { throw err };

                    if (result[0] && result[0]._id != '') {
                        return callback(null,result[0]);
                    }

                    return callback(null,null);
                })
            },
            ],
            function (err, user) {

                return 'function find shoud return this value';
            }
        );
    }
}
console.log(User.find("575578a9f95d6de1354327ef"));

1 个答案:

答案 0 :(得分:1)

函数find也必须有一个回调,你调用waterfall的回调。您不能从异步函数同步返回值。

find: function (id, callback) {
    async.waterfall(..., function (...) {
        callback(null, return_value);
    });
}

应该像

一样调用
User.find("575578a9f95d6de1354327ef", function (err, return_value) {
    console.log(return_value);
});