Tag: q

调用Node.js中的http.get请求数组

我有一个URL的数组,我使用for循环来调用http.get请求。 由于这是一个asynchronous过程,所以我希望在所有请求都返回后调用完成。 这是我目前的尝试: grunt.registerTask('verify', function() { var done = this.async(); var promises = []; var urlPrefix = 'http://example.com/'; for(var i = 0; i < deployableFiles.length; i++) { (function(i) { var deferred = Q.defer(); promises.push(deferred); var file = deployableFiles[i]; var path = file.filetype + '/' + getVersionedFileName(file.basename, file.filetype); http.get(urlPrefix + path, function(res) { deferred.resolve(); if(res.statusCode === […]

Q承诺相当于BlueBird Promise.Bind()

几个问题,Q有一个bindB bind()方法在BlueBird API和这个幻灯片JavaScript承诺〜Kerrick长 ? 它是核心承诺/ A +规范的一部分吗? 如果没有,是否有一个polyfill或解决方法?

为什么我的Q保证不能工作?

我新承诺和Q,我试图转换在node-mysql中使用query的路由。 这里是我的代码摘录: var Q = require('q'); // connection defined elsewhere router.get('/', function(req, res) { var query = Q.denodeify(connection.query); var promise = query("– query ommitted –", [req.user.id]); promise.then(console.log, console.error); }); 我试图从现有的设置,不使用承诺转换这一点,所以我知道连接设置正确,查询是有效的。 每当我尝试请求这条路线时,我都会在stderr中得到相同的信息: [TypeError: Cannot read property 'connectionConfig' of undefined] 我不知道它来自哪里,所以我不知道如何find完整的堆栈跟踪。 我也尝试了这个代码的替代版本,我有我自己的function,而不是console.log和console.error ,但是这个function从来没有被调用,并出现相同的错误。

在NodeJS中用q.all命名承诺结果

我有点新东西,我发现它非常棒,但有些东西我仍然无法弄清楚。 我设法通过传递q.all一个q.all数组来运行一些联合的promise。 像这样的东西 var promises = [promiseOne(), promiseTwo()]; q.all(promises).then(function (results) { res.send(results); } ); 事情是这样的,我真的希望这些承诺被命名,所以我不必依靠承诺的顺序。 我读了一个地方,你实际上可以传递一个对象到q.all ,以得到命名的结果。 所以这将是这样的: var promises = { promiseOne: promiseOne(), promiseTwo: promiseTwo() } q.all(promises).then(function(results){ res.send(results); }); 但我想这只是不像发送数组一样,因为我没有得到我的承诺的结果在那里。 我得到的结果类似于这个: { promiseOne: { source: {} }, promiseTwo: { source: {} } } 那么你怎样才能从q.all得到命名结果呢? 有一件事要注意的是,我将在promises数组中promises数量并不是固定的,因为我通过从用户发送到我的函数的GET参数得到了这个数字。 此外,在我的每一个承诺,我有承诺的另一个数组(或对象)被parsing,其结果我也想命名。

在承诺链中容纳Q.all

我发誓Q是因为它的简单性,所以我可能没有做太多的研究来检查其他'当时'的实现。 但是我用了很多Q! 我有一个“当时”的承诺链,我想在它的中间解决一批“承诺”,按顺序进行其他的操作; 所以很明显我应该使用Q.all。 但我在这里卡住了 要么Q做错了,要么我做错了。 以下是两个假设的asynchronous操作 var f=function(delay){ return Q.delay(delay).then(function(){ console.log("returning delayed",delay) return delay }) } f2=function(delay){ var defer=Q.defer() setTimeout(function(){ console.log("returning timedout",delay) return delay },delay) return defer.promise } 这是承诺链 Q('begin') .then(console.log) .then(Q.all([100,200,300,400].map(f))) .then(function(){ console.log("Finally",arguments) }).done() 这是我希望的输出 begin returning delayed 100 returning delayed 200 returning delayed 300 returning delayed 400 Finally { '0': undefined } […]

没有callback提供给pbkdf2

我有这个代码,它在我的开发计算机上工作得很好,但不在服务器上。 db.admin.verify([req.body.username]).then(function(data){ if (data[0].length == 0){ //if there is no user with that username console.log("bad username"); res.status(401).send('Incorrect username or password'); } var creds = data[0][0]; return myCrypt.pbkdf2(req.body.password, creds.salt).then(function(key){ if (creds.password === key.toString('base64')){ //correct password console.log("correct pw"); return db.admin.getUser([req.body.username]) } else { console.log("bad pw"); res.status(401).send('Incorrect password or username'); } }); }).then(function(dbData){ var user = dbData[0][0]; var […]

范围内的变化承诺“那么”方法

我写了下面的程序,每N毫秒处理一个目录中的所有文件: fs = require "fs" Q = require "q" class FileProcessor constructor: (options) -> @dir = options.dir @delay = options.delay processFiles: -> Q.nfcall fs.readdir, @dir .then (files) -> Q.all files.map (file) -> @processFile file # <– Error! .then -> Q.delay @delay .then -> @processFiles() .done() processFile: (file) -> deferred = Q.defer() # Does some stuff. […]

如何在node.js中使用q.defer来链接promise?

exports.list = function(req, res) { var location_parent_id = req.params.location_parent_id; var query = { company_id: req.company_id }; if(location_parent_id) { query.location_parent_id = location_parent_id; Location.findOne({someQuery}, function(err, location) { response.location = location; }); } else { query.location_parent_id = { '$exists': false } } Location.find(query, function(err, locations) { if(err) { response = { status: 'error', error: err } } else […]

链接返回承诺数组的函数

我有类似于以下内容的东西,想知道是否有一种“链式”的方式来做到这一点,或者如果我不符合标准,这代表了一种气味。 谢谢! var promises = Q.all(returns_a_promise()).then(returns_array_of_promises); var more_promises = Q.all(promises).then(returns_another_array_of_promises); var even_more_promises = Q.all(more_promises).then(yet_another_array_o_promises); Q.all(even_more_promises).then(function () { logger.info("yea we done"); }); 理想情况下是这样的: Q.all(returns_a_promise()) .then(returns_array_of_promises) .all(returns_another_array_of_promises) .all(yet_another_array_o_promises) .all(function () { logger.info("yea we done"); });

“Promise在事件循环的同一回合中触发”是什么意思?

新的NodeJS。 阅读promise教程('promise-it-wont-hurt')我有以下脚本: var Q = require('q'); var deferred = Q.defer(); deffered.resolve('SECOND'); deffered.promise.then(console.log); console.log('FIRST'); 输出: FIRST SECOND 我不明白,我会认为,既然解决了先解决,我应该先看看第二。 他们解释说,这是因为“承诺在事件循环的同一回合发生”。 我不明白这是什么意思