javascript - async.js 从最后一个函数返回值

标签 javascript node.js async.js

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

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

当我运行时

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

我的输出中有“未定义”,但我除了“function find shoud return this value”之外,如果我想在输出中获得“function find shoud return this value”文本,我应该做什么

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 也必须有一个回调,您可以在 waterfall 的回调中调用该回调。您无法从异步函数同步返回值。

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

应该这样称呼

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

关于javascript - async.js 从最后一个函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745484/

相关文章:

javascript - javascript正则表达式中的变量

javascript - 为什么我不能在 UIWebView 中关闭或关闭 Javascript 警报?

javascript - ReactJS:获取JSON

javascript - 在 async.until(test, function,callback) 中,测试函数不会被重复调用

Javascript - 表单提交时必填字段留空

javascript - createImageBitmap 调整大小 : doesn't work on Chrome?

javascript - 我使用 Node 静态提供下一个版本中的哪些文件?

node.js - 是否可以使用 puppeteer 将 Javascript 对象传递给 nodejs?

node.js - Nodejs 如何向 QL-720NW 发送 P-Touch 模板命令

javascript - 在 async.js waterfall 方法的成功回调中获取响应