javascript – 如何在node.js中使用q时删除样板代码

我目前正在使用带有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.

上一篇:Javascript,扩展ES6类setter将继承getter


下一篇:h2的时间类型和函数