我和Mongoose合作,我想对Q库使用承诺方法。
不确定何时使用各种方法nfcall,nfinvoke或用denodeify / nfbind包装API
示例:
var p = Q.when(User.findOne({login: 'johndoe'}).exec());
p.then(...)
或类似的东西:
Q.ninvoke(User, 'findOne', '{login:"johndoe"}').then(...)
或者包装API,如:
'use strict';
//pUser.js Q/promise wrapper
var Q = require('q'),
mongoose = require('mongoose'),
User = mongoose.model('User');
exports.findOne = function() {
return Q.denodefiy(User.findOne);
}
//and then use like:
var pUser = require('pUser');
pUser.findOne({...}).then(function(user) { ... });
我也看到像this这样的方法用nfbind或类似方法包装每个方法
由于
答案 0 :(得分:3)
Mongoose(至少在过去一年左右)已经回复了Promises / A + spec投诉的承诺。
除非必须,否则你不需要将它们包装在Q承诺中。问:作为承诺/ A +投诉本身很乐意消费这些承诺并与你互动。
例如,您可以在Q.all
的三次调用中使用find(...).exec()
。
Q.all([
User.find({route: foo}).exec(), // Q will detect that the values are 'thenable'
User.find({route: bar}).exec(), // and will automatically assimilate them into a
User.find({route: baz}).exec() // Q promise on its own. No explicit action needed.
]).spread(function(res1,res2,res3){
// access results.
});