【问题标题】:async.js return value form last functionasync.js 从最后一个函数返回值
【发布时间】:2016-06-10 18:29:24
【问题描述】:

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

但我不知道瀑布的返回值如何。

当我跑步时

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

我的输出中有“未定义”,但除了“函数查找应该返回这个值”之外,如果我想在我的输出中得到“函数查找应该返回这个值”文本,我应该怎么做

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"));

【问题讨论】:

  • 在每个.find 之前连接是个坏主意。

标签: javascript node.js async.js


【解决方案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);
});

【讨论】:

  • 我试试这个但我得到了错误:TypeError: undefined is not a function I you want,你可以看到我的更新。 pastebin.com/qVXTpNWS
  • @PawełBrzoski 您仍然同步调用该方法。一旦你进入异步代码,就没有出路了,你的调用也必须是异步的。看看更新的答案。
  • @PawełBrzoski 虽然我建议您研究更多类似Promise 的 API,因为带有回调的代码很快就会变得笨拙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2020-04-28
  • 2021-07-12
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多