node.js - Node.js 异步函数的可读性

标签 node.js asynchronous callback readability

我知道我们不应该在node.js异步函数中返回对象,并且异步函数内的每个路径都应该指向回调函数。为了一定程度上解决“末日金字塔”问题,为了更好的可读性,直接说“return;”是不是就可以了?调用回调函数后,我不必将其余代码放在 else block 中并跳过缩进并获得更好的可读性。到目前为止,代码一直运行良好,但只是想知道是否有任何我忽略的潜在问题。

(function(database) {
    var mongodb = require("mongodb");
    database.ObjectID = mongodb.ObjectID;
    var mongoUrl = "mongodb://localhost:27017/mydb";    
    var dbconn = null;
    database.getDBConn = function(next){
        if(dbconn){ next(null, dbconn); return; } //already connected: return dbconn
        mongodb.MongoClient.connect(mongoUrl,function(err, database){
            if(err){ next(err, null); return; } //connection fail: return error 
            dbconn = {db: database,  
                      movies: database.collection("movie") }; 
            next(null, dbconn); //connection success: return dbconn
        }); 
    } 


})(module.exports);

最佳答案

不,没有问题,但你可以争论可读性。

if(foo) {
  // do something
} else {
  // do something else
}

可读性并不比

差多少
if(foo) {
  // do something
  return;
}
// do something else

虽然我个人认为第一个版本是逻辑序列的更好表示,也是在第一个第二个替代方案之后运行代码的唯一方法,但这不适用于您的情况。

像您一样缩写流程就可以了。当使用 JavaScript 时,我将其变得更短:

if(err) return next(err, null);

由于如果设置了 err 参数,大多数回调应忽略数据参数,因此以下内容应该足够了:

if(err) return next(err);

这是最短的形式,我更喜欢它而不是每个 if-else 语句。

关于node.js - Node.js 异步函数的可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23324746/

相关文章:

TableView 中的 Facebook 好友列表 : Think need Async Programming?

所有代码运行后显示的 C# 异步窗口

java - Seam Hibernate 为两个单独的线程提供相同的 EntityManger 实例

javascript - Facebook 喜欢并带有回调的分享按钮

node.js - Node 。从 fs.watch() 返回的观察者监听 'error' 事件未触发

javascript - 外部修改文件会破坏 node.js 中的可写流

javascript - 我如何 stub fs 回调的注入(inject)参数以消除在测试套件中接触文件系统的需要?

javascript - 在javascript中,递归地使用回调函数进行循环控制——这很危险吗?

node.js - 如何获取node.js中通过require加载的包的版本

node.js - 绕过路由处理中的身份验证