我知道我们不应该在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/