我问了这个question并被告知避免Promise构造函数反模式。我阅读了链接的文章,但我不确定如何不使用反模式。这是功能:
db.getUserCount = function () {
return new Promise (function (resolve, reject) {
db.users.count().then(function (result) {
resolve (result);
}, function(e) {
reject (e);
});
});
我的所有数据库查询都像上面那样编码。这是我试图不使用反模式,但由于我不完全理解它,我也不认为这种方式是正确的:
db.getUserCount = function () {
return new Promise (function (resolve, reject) {
db.users.count().then(function (result) {
return (result);
}).then(function(result) {
resolve(result);
}).catch(function(err) {
reject(err);
});
});
};
由于我想编写好的代码,如果有人可以花一点时间向我展示一个使用上述功能的例子,不使用非常好的反模式。
答案 0 :(得分:4)
由于db.users.count()
似乎已经回复了承诺,你可以这样做:
db.getUserCount = function () {
return db.users.count();
});
无需将其包含在附加承诺中(使用new Promise(...)
)。
答案 1 :(得分:0)
如果db.users.count()
函数是异步操作,那么您编写的内容不是反模式。当方法是同步的时候会出现“反模式”,并且为了使用Promise模式而返回一个promise。
此处的关键是来自您引用的问题中链接到的另一个Stack Overflow question的引文:
...承诺是关于使异步代码保留同步代码的大部分丢失属性,例如扁平缩进和一个异常通道。
(强调,我的)
如果代码不是异步的,那么返回一个promise是一种反模式。
至于返回new Promise(...)
作为反模式?如果是这种情况,则返回new Anything()
是反模式。使用Promise构造函数很好。