Tag: q

在Q中链接任意数量的承诺

我想发送一个HTTP请求N次。 我想最终得到关于每个请求的结果的信息。 运行请求function一次很好。 以下是使用Q.defer()的HTTP请求函数: function runRequest() { var deferred = Q.defer(), start = (new Date).getTime(), req = HTTP.request(options, function(res) { var end = (new Date).getTime(), requestDetails = { reqStatus: res.statusCode, reqStart: start, reqEnd: end, duration: end – start } deferred.resolve(requestDetails); }); req.on('error', function(e) { deferred.reject(e.message); }); req.end(); return deferred.promise; } 如果我这样做,我收回我期望的数据: runRequest().then(function(requestDetails) { console.log('STATUS: ' […]

将Q迁移到BlueBird(或Vow)

我目前在Node / amqp应用程序中使用Q promise库。 我已经读过,像BlueBird或者Vow这样的Q库的性能是不太好的。 不幸的是,我不知道如何使用BlueBird(或Vow)来取代我目前的Q使用模式。 这是一个例子: this.Start = Q(ampq.connect(url, { heartbeat: heartbeat })) .then((connection) => { this.Connection = connection; return Q(connection.createConfirmChannel()); }) .then((channel) => { this.ConfirmChannel = channel; channel.on('error', this.handleChannelError); return true; }); 我应该提到 – 我正在使用TypeScript …在这个例子中,我正在接受一个amqplib承诺,并创build一个Q承诺(因为我不喜欢amqplib承诺)。 我如何用BlueBird或Vow做到这一点? 另一个例子是: public myMethod(): Q.Promise<boolean> { var ackDeferred = Q.defer<boolean>(); var handleChannelConfirm = (err, ok): void => […]

asynchronous和Q承诺在nodejs

我在nodejs中使用Q库和asynchronous库。 这是我的代码的一个例子: async.each(items, cb, function(item) { saveItem.then(function(doc) { cb(); }); }, function() { }); saveItem是一个承诺。 当我运行这个,我总是得到cb is undefined ,我想then()没有访问权限。 任何想法如何解决这个问题?

限制Q承诺Node js中的并发

有什么办法可以限制在js中一次执行的并发Q promise的数量吗? 我正在build立一个networking刮板,它必须要求和parsing更多的3000多页,并没有扼杀一些请求我没有响应的时间,所以连接rest和所需的响应(HTML代码)变得不可用。 为了对付这个问题,我发现限制了我的问题消失的请求数量。 我已经尝试了以下方法,但无济于事: Q承诺中的并发限制 – 节点 我怎样才能限制Q promise的并发性? https://gist.github.com/gaearon/7930162 https://github.com/ForbesLindesay/throat 我需要请求一个url数组,每次只做一个请求,当数组中的所有url都完成时,然后将结果返回给一个数组。 function processWebsite() { //computed by this stage urls = [u1,u2,u3,u4,l5,u6,u7,u8,u9]; var promises = throttle(urls,1,myfunction); // myfunction returns a Q promise and takes a considerable // amount of time to resolve (approximately 2-5 minutes) Q.all(promises).then(function(results){ //work with the results of the promises array […]

Q承诺中的并发限制 – 节点

有什么方法来限制使用Q promise库的promise的并发性吗? 这个问题有点相关我怎样才能限制Q promise的并发性? 但问题是,我试图做这样的事情: for (var i = 0; i <= 1000; i++) { return Q.all([ task1(i), task2(i) ]); // <– limit this to 2 at a time. } 真正的用例是: 从数据库提取post 在数据库中像posts.forEach(function(post) {} 对于每个职位做任务1,任务2,任务3(检索社交计数器,检索评论计数等) 在数据库中保存新的发布数据。 但问题是节点正在同时执行所有文章的所有任务,例如同时向Facebook发送500个post的“点数”。 如何限制Q.all()所以一次只有2个职位正在执行他们的任务? 或者还有其他可行的解决scheme可以应用 注:大多数任务(如果不是全部)依赖于请求库

Q承诺Nodejs如何在循环中解决

我有写在nodejs的代码让我混淆使用Q Promises theFunction() .then(function(data) { var deferred = Q.defer() var result = []; for(i=0; i < data.length; i++) { secondFunc(data.item) .then(function(data2) { data.more = data2.item }); result.push(data); } deferred.resolve(result); deferred.promise(); }); 我想第二个函数里面的数据循环可以推入结果 所以我以前的数据是这样的 [ { id: 1, item: 1, hero: 2 }, { id: 1, item: 1, hero: 2 } ] 像这样 [ { id: […]

Q.nfcall和Q.fcall有什么区别?

我是node.js的新手 我想了解Q.nfcall。 我有以下的Node.js代码。 function mytest() { console.log('In mytest'); return 'aaa'; } Q.nfcall(mytest) .then( function(value){ console.log(value); }); 我的预期产出应该是: In mytest aaa 但实际产出是: In mytest 在上面的代码中将Q.nfcall改为Q.fcall之后,输出就成了我的预期: In mytest aaa 为什么? Q.nfcall和Q.fcall有什么区别? 谢谢。

Node.js承诺:asynchronous推送到数组并保存

我目前正尝试从我通过请求接收的项目列表推送到一个数组(Mongo模型中的属性)。 从这些项目,我循环通过他们看到哪一个目前在数据库中,如果不是这样的话,那么我创build一个新的项目,并尝试保存它。 我正在使用承诺来完成这个任务,但我无法弄清楚为什么在所有的承诺完成后数组是空的。 var q = require('q'); var items_to_get = ['1', '2', '3']; // example array var trans = new Transaction({ items : [] }); var promises = []; for (var i = 0; i < items_to_get.length; i++) { var ith = i; //save current i, kinda hacky var deferred = q.defer(); //init promise //find […]

nodejs redis Q promise,如何使它工作?

我正在尝试从redis获取一些值,并将它们结合起来并最终发送。 但我不能使这些承诺工作。 这是从redis get简单的function client.get('user:1:id',function(err,data){ // here I have data which contains user ID }); client.get('user:1:username',function(err,data){ // here I have data which contains username }); 现在我想获得ID和username ,并发送给他们,但我不知道如何做到这一点。 我设法使它与callback工作,但它是非常混乱的结果,所以然后我试图将匿名函数包装到Q.fcall ,然后调用。然后.then看起来像这样 client.get('user:1:id',Q.fcall(function(err,data){ return data; }).then(function(val) { // do something })); 但是这让我错误了太多的论点被传递,我甚至不知道这是否会帮助我,即使它会工作。

kriskowal / q node.js q.all和传播

我有一个函数需要传递给它的三个前面的承诺的结果。 一个是线性依赖的,另外两个可以同时运行。 我想用q.all来parsing这三个promise,然后把结果传给第四个使用.spread。 我的代码不起作用。 任何帮助,将不胜感激。 var p1 = doWork(data); var p2 = p1.then(doMoreWork); var p3 = doConcurrentWork(data); return q.all([p1,p2,p3]).spread(funcWith3params) .fail(function(err) { console.log(err): } 我可以跟踪节点检查器中的代码,看到前3个承诺被调用。 但是,.spread调用的函数没有被调用。 任何线索为什么? 也.fail也没有被打。