Tag: q

我怎样才能得到JavaScript服务事件队列在节点

我有一个函数,需要等到一个承诺解决之前返回一个值。 不幸的是,简单地使用一个while循环,并检查是否解决承诺霸占线程,不会让我的setTimeout函数执行它的callback。 我能想到的唯一解决scheme是告诉js服务事件队列,如果我的d.promise还没有被parsing为true。 贝娄是我的代码: var _ = require('lodash'); var Q = require('q'); var h = function(x,y,z, callback) { setTimeout(function(){ // This never logs to my terminal console.log(x + y + z); callback(); }, 1000); }; var b = function(x,y,z, callback) { console.log(x * y * z); callback(); }; chain = function(args, f) { var index; […]

从Q.all压缩结果的最佳方式

并行(Q.all)承诺压缩结果的最佳方式是什么? 只是 .spread(function(result1, result2) {return _.zip(result1, result2);}) 什么更好?

有人可以为我解释下面的代码吗?

我正在努力去理解诺言。 但在这里我很困惑。 我想创build一个3秒钟后打印3000的testing函数,2秒后打印2000,1秒后打印1000。 这是我的代码: 'use strict'; var Q = require('q'); function delayConsole(timeOut) { var defer = Q.defer(); setTimeout(function(){ console.log(timeOut); defer.resolve(2000); },timeOut); return defer.promise; } // This works delayConsole(3000).then(function(){ return delayConsole(2000); }).then(function(){ return delayConsole(1000); }); // This doesn't work. Why? delayConsole(3000).then(delayConsole(2000)).then(delayConsole(1000));

Q承诺:如何顺序尝试多个registry

我可能需要一些关于node.js应用程序的Q promise的帮助。 我的用例如下: 我们需要find(通过ID)一些信息(说一个命令) 我们有多个存储库可能包含的信息(目录,数据库,nosql,REST服务…) 我们有一个search序列。 也就是说,我们不希望以平行和最快的速度search所有的数据,但是我们需要依次search一个数据库 find信息后,我们可以停止search并忽略剩余的存储库 我们已经对每个存储库都有承诺 我正在努力的是创造/返回一个承诺,完成时,信息被发现。 像(伪代码): var deferred = Q.defer(id) foreach repo in repositories { var p = repo.findById(id) .then deferred.resolve(order) p.waitForThePromiseToFinish if (p.success) break } 一个想法如何实现这一点? 任何帮助表示赞赏。

使用Q使用Node.js服务器链接数据库查询

要开始,我还在学习承诺,所以我真的可以用一些帮助。 我有: request.get(options, function(error, response, body) { connection.query('SELECT * FROM `users` WHERE `spotify_id` = ' + body.id, function(error, results, fields) { var getIdQuery = 'SELECT `id` FROM `users` WHERE `spotify_id` = ' + body.id; if (results.length != 0) { console.log("this user already exists"); connection.query(getIdQuery, function(error, results, fields) { tokenAndId['id'] = results[0]['id']; defer.resolve(tokenAndId); }); } else […]

末日金字塔

我有这个路由代码到一个node.jsexpression式应用程序,我试图用q来使用承诺,而不是进入“callback地狱”。 我在上面包含了一个“服务层”,并且需要进行两个调用,并从两个函数返回一个带有数据的json结构。 var express = require('express'); var q = require('q'); var service = require('./../model/service'); var router = express.Router(); router.get('/trips', function(req, res, next) { service.getAllTrips(function(err, trips) { if (err) throw err; service.getPeopleForTrips(function(err, people) { if (err) throw err; var json = { trips: trips, people: people }; return res.json(json); }); }); }); module.exports = router; 我已经尝试将这两个服务调用分离成这个q例子在这里显示的内容,但是仍然无法使它工作或者如何构造这个例子。 […]

Q.部分成功

我似乎无法find用于Googlesearch的正确方法。 当我使用q.all时,会发生什么(在node.js中),只有一两个失败。 我需要进入那个.then(对于所有我曾经使用过的成功的例子来说,那些失败的对我来说并不重要)。 这个function可能吗?

在运行摩卡unit testing时,如何避免在NodeJScallback式API中调用两次Q promise catch块?

我们在节点API中使用Q promise库,但允许通过callback调用函数。 例如: function foo(cb) { Q.fcall(function () { return true; }).then(function (result) { return cb(null, result); }).catch(function (err) { return cb(err, null); }); } 当我运行我的摩卡单位testing时,如果在callback中有一个exception,它会导致callback被调用两次。 例如: var called = 0; foo(function (err, res) { called++; console.log('err: ' + err); console.log('res: ' + res); console.log('called: ' + called); throw Error(throw Error from foo!'); }); 这给出了以下结果: […]

了解节点stream和vinyl-fs

我有一个奇怪的问题,我不知道我的问题在哪里。 可能是因为我缺乏对节点stream或乙烯fs基础知识的理解。 无论如何,这里是描述: 我正在构build不同的脚本,我想用吞咽。 比如,这个正在build设一些我需要的资产。 更确切地说,我正在将引导源文件从node_modules复制到我的资产文件夹。 这个函数应该返回一个promise,这样我就可以更容易地用它来使用它。 这是sass-bootstrap.js文件,它将完成这项工作: 这是一个较短的版本,之前有一些检查,但与我的问题没有关系。 假定所有的variables定义。 var defer = Q.defer(), vinylFs = require( 'vinyl-fs' ), map = require( 'map-stream' ); function sass_bootstrap() { var defer = Q.defer(); vinylFs.src( [ bootstrap_sass_route + '/**/_*.scss' ] ) .pipe( vinylFs.dest( assets_sass_bootstrap ) ) .pipe( map( function( file, cb ) { cb( null, file ); })) […]

用额外的数据扩展承诺

我使用kriskowal/q promise库来处理http请求,但为了简化,我们假设我有一个dynamic创build的promises数组,并将其推送到promises数组: var promises = [], ids = ['foo', 'bar', 'buz']; ids.forEach(function(id){ var promise = Q.fcall(function () { return 'greetings with ' + id; }); promises.push(promise); }); // and handle all of them together: Q.all(promises).then(function (results) { console.log(results); }); // gives: [ 'greetings with foo', 'greetings with bar', 'greetings with buz' ] 问题是 – 有可能以某种方式分配一个id到承诺,以后在all执行中获得它? […]