没有参数的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 及其工作原理
我正在开发一个 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 及其工作原理