Tag: q

摩卡超时与Q承诺失败的断言

为什么在Q未来内断言失败时,摩卡会超时? 发生这种情况时,您也不会看到断言失败。 这不会发生,如果我只使用callback。 我应该怎么写,而仍然使用期货,但看到断言错误,而不是超时? var Q = require('q'); function hack() { var ret = Q.defer(); ret.resolve(true); return ret.promise; } it('test', function(done) { hack().then(function(bool) { assert(false); done(); }); });

处理错误后跳过承诺链

使用https://github.com/kriskowal/q库,我想知道是否有可能做这样的事情: // Module A function moduleA_exportedFunction() { return promiseReturningService().then(function(serviceResults) { if (serviceResults.areGood) { // We can continue with the rest of the promise chain } else { performVerySpecificErrorHandling(); // We want to skip the rest of the promise chain } }); } // Module B moduleA_exportedFunction() .then(moduleB_function) .then(moduleB_anotherFunction) .fail(function(reason) { // Handle the reason in […]

Q Promise库的.finally()和.done()之间有什么区别?

使用Nodejs Q promise库的.finally()和.done()语句有什么区别。 例如,这两者之间的区别是什么? Q(…) .then(…) .finally(); //or fin() Q(..) .then() .done();

一旦进入AngularJS,有什么方法显示“分块”响应?

目前,我有一个问题,显示从我的Web服务Node.js服务器(localhost:3000)发送到在Node.js服务器(localhost:3001)上运行的模拟客户端的响应块。 编辑* – 当前的实现只是使用Angular的%http作为没有web-sockets的传输 逻辑如下: 1。 在“Cities”的客户端创build一个数组,并将它们(从AngularJS控制器)发布到位于以下位置的Web Service:localhost:3000 / getMatrix $http({ method: 'POST', url: 'http://localhost:3000/getMatrix', data: cityArray }). success(function (data,status,headers,config){ // binding of $scope variables // calling a local MongoDB to store the each data item received for(var key in data){ $http.post('/saveRoutes', data[key]) .success(function (data, status){ // Data stored }) .error(function (data, status){ // error […]

如何通过NodeJS向端点发出Ajax请求

我正在使用NodeJS。 我的一个函数(让我们称之为funcOne)接收一些input,我传递给另一个函数(让我们称之为funcTwo)产生一些输出。 在将input传递给funcTwo之前,我需要对通过input的端点进行Ajax调用,然后我必须将通过AJAX调用产生的输出传递给funcTwo。 funcTwo只能在AJAX调用成功时调用。 我如何在NodeJS中实现这一点。 我想知道在这种情况下是否可以使用Q库

Mongoose和promise:如何获得一个查询结果数组?

使用mongoose从db和Q中查询promise的结果,但发现很难绕过我的头,只是得到一个可用的用户列表。 目前我有这样的一些东西: var checkForPerson = function( person ) { people = mongoose.model('Person', Person) return people.findOne({"_id": person }, function(err, doc) { if (err) console.log(err) if (doc !== null) { return doc } else { console.log('no results') } }) } var promises = someArrayOfIds.map(checkForPerson); // this is where I would like to have an array of models […]

在返回从循环中调用的数据库查询检索到的数据中的问题

我在循环中做了多个mongoDB查询。 并希望将所有结果作为一个数据数组发送。但是,当我简单地使用返回来发送数据时,它只是简单地返回undefined,不要等待所有数据库请求的结果。 我也尝试使用q.moulde,但同样的问题。 码: var getPrayerInCat = function(data){ var result ; var finalData = []; if(data.length >0){ data.forEach(function(data2){ var id= data2.id; Prayer.find({prayerCat:id},function(err,prayer){ var deferred = Q.defer() if (err) { // … console.log('An error has occurred'); // res.send(err); result= finalData = err } else { if(!prayer){ // console.log(data2.id+'–0'); data2.prayersCount = 0; result = deferred.resolve(finalData.push(data2)) } else […]

我怎样才能限制Q promise的并发性?

我如何编写一个限制Q promise并发性的方法? 例如,我有一个方法spawnProcess 。 它返回一个Q的承诺。 我不想每次都产生超过5个进程,但是对于调用代码是透明的。 我需要实现的是带签名的函数 function limitConcurrency(promiseFactory, limit) 我可以打电话给我 spawnProcess = limitConcurrency(spawnProcess, 5); // use spawnProcess as usual 我已经开始编写我的版本了,但是我想知道是否有人可以简单的实现我可以检查的版本。

何时拒绝/解决承诺

我在想什么时候我需要拒绝承诺。 我发现了几个关于这个话题的问题,但是找不到合适的答案。 我应该什么时候拒绝承诺? 这篇文章http://howtonode.org/6666a4b74d7434144cff717c828be2c3953d46e7/promises说: 解决:一个成功的Promise被“解决”,它调用正在等待的成功侦听器,并记住为未来成功侦听器parsing的值。 分辨率与返回的值相关。 拒绝:遇到错误情况时,Promise被拒绝,它调用正在等待的错误侦听器,并记住被连接的未来错误侦听器拒绝的值。 拒绝与抛出的exception相关。 这是原则指引吗? 那只有在发生exception时才拒绝承诺? 但是在遇到类似的function的情况下 findUserByEmail() 我会希望该函数返回一个用户,以便我可以继续链而不validation结果 findUserByEmail() .then(sendWelcomeBackEmail) .then(doSomeNiceStuff) .then(etc..) 什么是最好的/常见的做法?

在Node.js上,Q延迟是如此之慢?

所以我在Node.js中创build了这个简单的testing服务器 每当我做出直接的回应,我就会得到2200个请求/秒(快!)。 当我只包装一个简单的Q时,它会下降到580个请求/秒( 慢4倍 !)。 有人可以解释这个巨大的差异吗? // Requires var server = require('http'); var q = require('q'); // Start server var http = require('http'); http.createServer(function(request, response) { // Comment out either of two below sections // Without deferred // 2200 reqs/second response.writeHead(200, {"Content-Type": "text/html"}); response.write("test"); response.end(); // Q deferred // 580 reqs/second var deferred = q.defer(); […]