没有参数的Nodejs异步函数

Nodejs Asynchronous function without parameter

我正在开发一个 rethinkDB 数据库并使用快速服务器和 HTTP 请求访问它。

据我所知,要从数据库中获取数据然后响应 HTTP 请求,需要一个异步函数。

我的看起来像这样:

getChain(notNeeded, callback) {
        // Connecting to database
        let connection = null;
        rethinkdb.connect({ host: 'localhost', port: 28015 }, (err, conn) => {
            if (err) throw err;
            connection = conn;
            rethinkdb.db(dbUsed).table(tableUsed).run(connection, (err, cursor) => {
                if (err) throw err;
                cursor.toArray((err, result) => {
                    if (err) throw err;
                    // console.log(JSON.stringify(result, null, 2));
                    console.log(result + "1");
                    callback(result);
                })
            })
        })

    }

我正在通过以下方式访问它:

router.get('/', (req, res, next) => {
    DatabaseBlockchain.getChain(('not needed'), callback => {
        res.status(200).json(callback);
    }) 
})

如您所见,有一个变量 "not needed",我不需要。
但是在没有第二个变量的情况下创建 "getChain" 时,我无法在最后调用 "callback(result)" 并得到 "callback is not a function" 的错误。


所以,我的总体问题是,是否有一种方法可以在没有第二个参数的情况下创建异步函数!
非常感谢:)

您必须从函数定义和函数调用中删除 "not needed" 参数:

getChain(callback) {

并且:

DatabaseBlockchain.getChain(result => {
    res.status(200).json(result);
}) 

是的,这是可能的。回调的行为与所有其他参数一样。

getChain(callback) {
        // Connecting to database
        let connection = null;
        rethinkdb.connect({ host: 'localhost', port: 28015 }, (err, conn) => {
            if (err) throw err;
            connection = conn;
            rethinkdb.db(dbUsed).table(tableUsed).run(connection, (err, cursor) => {
                if (err) throw err;
                cursor.toArray((err, result) => {
                    if (err) throw err;
                    // console.log(JSON.stringify(result, null, 2));
                    console.log(result + "1");
                    callback(result);
                })
            })
        })

    }

然后称之为

router.get('/', (req, res, next) => {
    DatabaseBlockchain.getChain(callback => {
        res.status(200).json(callback);
    }) 
})

您需要注意的一些事项:

  • 除非您使用 async/await,否则异步错误处理不适用于 throw。
  • 如果您想使用回调,请将错误传递给回调。按照惯例,如果一切顺利,第一个回调参数应始终为错误或 null。
  • 看看 promise 及其工作原理