Tag: q

使用promise从mongo db中检索对象时出错

伙计们,我试图用承诺包装下面,并返回一个Mongo文件。 控制器的catch是越来越error: 'TypeError: Cannot call method \'apply\' of undefined' 从数据库返回到控制器的正确方法是什么? 控制器: Q.fcall(Users.fetchId(authId)).then(function userVerification(userObject) { console.log ('got back',userObject); responses.Unauthorized('Unauthorized ID', res); }).catch(function handleError(err) { responses.InternalServerError(''+err, res); }); 用户型号: Users.prototype.fetchId = function fetchId(authId) { return this.mongodb.fetchId(authId); }; 蒙戈: MongoDatabase.prototype.fetchId = function fetchId(id) { var result = {} return this.authDB.query('users', function(collection) { return collection.findOne({_id:id}, function (err, doc) { […]

承诺的退货价值不是预期的

我有一些逻辑,我试图build立一个“人”对象,我有一个名为getProvider的方法,我基本上从mongo获取提供者并将其分配给person.provider 。 由于对mongo的调用是asynchronous的,我试图使用promise。 除了我的.then方法之外,在任何地方logging它的值似乎都是正确的。 它显示{"source": {}} ,我不知道为什么。 这是我的输出: data = MYPROVIDER provider = MYPROVIDER after addProvider {"source":{}} … configDone.promise.then(function () { return addProvider(); }).then(function() { console.log('after addProvider'); console.log(JSON.stringify(people[0].provider)); // SHOWS {"source": {}}. WHY IS IT DOING THIS? callback(null, people); }).fail(function (err) { callback(err); }); function addProvider() { var promises = []; people.forEach(function(person){ promises.push(person.provider = getProvider(person.id, […]

当child_process成功处理信号时callback

我需要validation一个child_process已经成功地被杀死,因为如果这个进程仍然存在,我不能执行下一个操作。 var proc = require('child_process'); var prog = proc.spawn('myprog', ['–option', 'value']); prog.on('data', function(data) { // Do something }); 在代码的其他地方,我达到了某个事件,并在一定的条件下,我需要杀死prog : prog.kill('SUGHUP'); // Only when the process has successfully been killed execute next // Code… 由于kill可能是asynchronous的,我正在使用q 。 我想在kill上使用q ,但kill在处理完信号后没有执行callback。 怎么做? 可能的想法 如果我发送一条消息来处理prog并在接收到消息的过程prog我杀了它? 如何能告诉一个过程自杀?

将一组q个promise发送到数据包中,并连续运行这些数据包

我的目标是复制文件并将并行复制的文件限制为一个已定义的variables。 因此,我将fs.copy调用拆分成了一组数据包,并使用reduce函数串行运行这些数据包。 var promise = _.reduce(packets, function (previous, packet) { var map = _.map(packet, function (file) { return q.nfcall(fs.copy, file.source, file.target); }); return previous.then(q.all.bind(null, map)); }, q()); 如何用q实现我的目标?

asynchronousnode.js代码(使用Q)不写入标准错误

在编写asynchronousnode.js代码时,我遇到了以下问题: 在asynchronous块内抛出的错误不会将任何内容打印到控制台标准错误 ,它们只是失败而已。 下面是一个自包含的工作示例来重新创build问题,我在asynchronouscallback的外部和外部调用一个不存在的函数: 注意//表示的行! 注释 var Q = require('Q'); function asyncFunc(){ var deferred = Q.defer(); setTimeout(function(){ console.log('resolving promise!'); deferred.resolve('resolveMessage'); },2000); return deferred.promise; } asyncFunc() .then(function (msg) { nonExisting(); // ! calling here puts no error on the console console.log('Promise.then entered, msg:',msg); }); //nonExisting(); // ! calling here results in referenceError correctly printed to the […]

Node.js Q ninvoke多个参数

如何将多个parameter passing给Q ninvoke? 例如: exports.getBalance = function () { return Q.ninvoke(library, 'method', **[Arguments]**); } 目前我有 return Q.ninvoke(library, 'method', '*', 6); 凡参数是一个数组或参数列表? 我想重复使用我的ninvoke调用,但有时方法需要一个或多个参数。 谢谢。 理查德。

如何使用$ limit和$ sort在mongoDB中使用Q.nbind()

我在我的应用程序中使用Q模块。 我想使用$ limit和$ sort函数为我的查询mongoDB,我也使用Q.nbind()进行查询 var Q = require('q'); var mongoose = require('mongoose'); var RequestPrayers = mongoose.model('requestPrayers'); var RPrayerfind = Q.nbind(RequestPrayers.find, RequestPrayers); function getSingleRParyerInfo(FrndID){ var id = FrndID var prayerInfo={prayersInfo:''}; return RPrayerfind({userID:id, is_notPrivate:true}) // return find() // ^^^^^^ Rule 1 .then(function(Prayers) { // ^^^^^ Rule 3 if (!Prayers){ prayerInfo.prayersInfo = ''; // console.log(User) }else{ prayerInfo.prayersInfo = […]

Q.ninvoke节点蓝鸟的replace

我从Q迁移到蓝鸟项目。 在这个项目中,Q.invoke被使用了很多。 例如在这样的中心方法中: repo.count = function(entity,query) { // entity is a mongoose model var command = query = entity.find(query).count(); return Q.ninvoke(command, 'exec'); }; 什么是最好的蓝鸟重构这个代码的方式,并返回相同的“种”承诺? 阅读蓝鸟文件,似乎promisifyAll似乎是在正确的方向点。 现在,我有这个工程,但阻止呼叫: repo.count = function*(entity,query) { entity = bluebird.promisifyAll(entity); // this needs to be moved somewhere central return yield entity.find(query).count(); };

如何避免在使用q.map时破坏承诺链?

我想我可能已经过于乐观了。 我有一堆鹅,在返回最终值之前,我想要执行任意数量的操作。 我发现,在第一个回报声明之后,链条被打破了。 如果我的集合有10个项目,那么将有10个项目被放置在数据库中,但是当我尝试从下面的“return Q.all(promises)”语句构buildAPI响应时,我会得到空值。 为了testing,我已经把一个console.log语句放在一个承诺之后,在我的expressjs路由里面的第一个和一个console.log之后触发,它期待着鹅的细节。 API响应总是首先完成“[null,null]”,然后最终获得链中第二个和第三个promise的条目。 我是如何创造这种竞争条件的,我该如何解决? var promises = geese.map(function(goose) { determineGooseType(goose.details) .then(function(type) { return recordNewGooseType(type) }) .then(function(dbInsertResult) { we never really got here! }) .catch(function(err) { log some stuff }); } return Q.all(promises);

链接超时导致上次超时被拒绝?

我目前正试图用超时链接一些承诺,不pipe超时是什么,总是报告最后一个。 我用bluebird和Q做了相同的结果,所以我觉得我有一个普遍的问题。 代码基本如下所示: var Promise = require('bluebird'); Promise.delay(2000) .then(function() { return Promise.delay(2000); }) .timeout(1000, 'Timeout 1') .then(function() { return Promise.delay(500); }) .timeout(1000, 'Timeout 2') .then(function() { return Promise.delay(500); }) .timeout(1000, 'Timeout 3'); 我得到“未处理的拒绝超时错误:超时3”。 我想要的是超时1.我尝试每次超时后捕捉,但我也一样。 有没有办法让它工作,而不完全分裂?