我目前正在使用带有Node.js的q.我所有的模特都使用q的承诺.后来我意识到写了很多这样的样板代码
count: function(){
var deferred = Q.defer()
User.count(function(err,count){
if(err)
deferred.reject(err)
else
deferred.resolve(count)
})
return deferred.promise;
},
findAll: function(){
var deferred = Q.defer()
User.find({}, function(err,users){
if(err)
deferred.reject(err)
else
deferred.resolve(users)
})
return deferred.promise;
}
有没有办法删除这个样板代码?
解决方法:
Is there a way remove this boilerplate code?
是的,Q有dedicated helper functions for interfacing with node callbacks.
您可以将代码简化为
count: function(){
return Q.nfcall(User.count);
},
findAll: function(){
return Q.nfcall(User.find, {});
}
如果这些方法依赖于它们的值,则可以使用Q.ninvoke(User,“count”)和Q.ninvoke(User,“find”,{}).
通过使用Q的函数/方法绑定,您甚至可以将其带到更高的极限并完全避免函数表达式:
count: Q.nfbind(User.count),
findAll: Q.nfbind(User.find, {})
或者使用此值:
count: Q.nbind(User.count, User),
findAll: Q.nbind(User.find, User, {})
但请注意,使用这些解决方案,您需要确保使用零参数调用count和findAll.