编写自己的node.js回调的最佳实践是什么?
我已经阅读了很多关于如何编写回调的教程。然而,这些都没有真正了解推荐的设计是什么 想象一下,这段代码使用虚拟查询函数通过虚拟数据库登录用户,使其保持简单,但仍可编译和运行:编写自己的node.js回调的最佳实践是什么?,node.js,callback,Node.js,Callback,我已经阅读了很多关于如何编写回调的教程。然而,这些都没有真正了解推荐的设计是什么 想象一下,这段代码使用虚拟查询函数通过虚拟数据库登录用户,使其保持简单,但仍可编译和运行: var db = {}; // fake query function for demonstration purposes db.query = function(query, cb) { console.log('Running an expensive query:', query); if (que
var db = {};
// fake query function for demonstration purposes
db.query = function(query, cb) {
console.log('Running an expensive query:', query);
if (query == 'get uid from db')
return cb(null, {password: 'pwd'});
return cb(null, {password: 'pass'});
}
var login = function(user, password, cb) {
var q = 'get ' + user + ' from db';
db.query(q, function(err, user) {
if (err || !user || user.password != password)
return cb(false);
return cb(true);
});
};
console.log('pre');
login('uid', 'pwd', function(success) {
console.log('Login', success ? 'was successful' : 'failed');
});
console.log('post');
module.exports = null;
在这段代码中,我依靠DB层以正确的异步方式处理query
函数的回调,这样我自己在login
函数中的回调也会被异步调用
然而,这是我自己回调的正确设计吗?我是否最好将db.query
中的回调包装成进程.nextTick()
调用?
还是有更好的办法
我感兴趣的是了解如何设计这两种回调:
- 回调作为node.js库执行的另一个回调的一部分运行
- 我自己的昂贵/复杂算法/操作
var callback = function(err, data1, data2){
}
回调的第一个参数应该始终是可能发生的任何错误
无论是节点标准库的回调还是您自己的代码,都应该遵循此约定
如果遵循此约定,则可以使用async.js之类的库或其他依赖于此约定的库。域也依赖于此约定。问题中的代码仅用于演示目的。但是在你的回复中,我注意到的是提到了async.js。async和下划线是两个库,在执行任何非平凡的node.js工作时都是必不可少的。