【发布时间】:2015-03-04 22:35:39
【问题描述】:
我正在使用 Kris Kowal 的 Q 库通过控制器和存储库实现 Node.js 逻辑。我有一种感觉,我在下面的例子中使用 Promise 的方式是不正确的。但是我找不到任何关于如何通过多层或功能使用承诺的正确模式的指导。
我做得对吗?实现这个逻辑的正确方法是什么?
// 模块:存储库
exports.findOne = function (query) {
var deferred = Q.defer();
db.query(query, function (err, data) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(data);
}
});
return deferred.promise;
};
// 模块:用户
var isEmailAvailable = function (value) {
var deferred = Q.defer();
Repository.findOne({email: value})
.then(function (user) {
if (user) {
if (self.id === user.id) {
deferred.resolve(true);
}
else {
deferred.resolve(false);
}
} else {
deferred.resolve(true);
}
})
.fail(function (err) {
deferred.reject(err);
});
return deferred.promise;
};
this.save = function () {
var deferred = Q.defer();
isEmailAvailable(this.email)
.then(function (result) {
if (result) {
Repository.upsert(self)
.then(function (user) {
deferred.resolve(user); //--- Yey!!!
}).fail(function () {
deferred.reject('Account save error')
});
} else {
deferred.reject('The email is already in use');
}
}).fail(function () {
deferred.reject('Account validation error')
});
return deferred.promise;
};
【问题讨论】:
标签: javascript node.js promise repository-pattern q