如何将此函数转换为不使用Promise构造函数反模式

时间:2016-05-03 11:58:53

标签: javascript promise

我问了这个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);
        });
    });
};

由于我想编写好的代码,如果有人可以花一点时间向我展示一个使用上述功能的例子,不使用非常好的反模式。

2 个答案:

答案 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构造函数很好。