node.jsasynchronous函数的可读性

我明白,我们不应该在node.jsasynchronous函数中返回对象,并且asynchronous函数中的每个path都应该导致callback函数。 为了在一定程度上解决“厄运金字塔”问题,并为了更好的可读性,只要说“回报”就可以了。 在调用callback函数之后,我不必将剩余的代码放在else块中,并跳过缩进并获得更好的可读性。 代码一直工作得很好,但只是想知道是否有任何潜在的问题,我忽略。

(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 

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

如你所做的那样,简化stream程是很好的。 使用JavaScript时,我甚至更短:

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

由于大部分callback都应该忽略数据参数,如果设置了err参数,以下就足够了:

 if(err) return next(err); 

这是最短的forms,我更喜欢每个if-else语句。

你对我看起来很好。 你只需要确保每个callback中的每个if / else代码path都有一个“next”。

在某个时候,你可能会想通过使用一个asynchronous模块 (更易于访问)或一个promises模块 (用更less的东西做更多的事情)来避免厄运的金字塔。

Interesting Posts