Tag: q

节点js不解决承诺的数组

我试图执行几个asynchronous请求,并试图使用承诺获得输出。 如果我有多个请求排队Q.all(promises).then()函数似乎不工作。 对于单个请求,承诺全部解决。 示例代码在这里。 var request = require('request'); var Q = require('q'); var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com']; // var sites = ['http://www.google.com'] var promises = []; for (site in sites) { var deferred = Q.defer(); promises.push(deferred.promise); options = {url: sites[site]}; request(options, function (error, msg, body) { if (error) { deferred.reject(); } deferred.resolve(); }); } […]

Q拒绝承诺,然后成功callback

我在节点应用程序中使用kriskowal Q promise库。 我有代码读取一个文件,然后试图parsing它的一部分到一个Javascript的date对象(我有类似的代码在其他地方试图做一个JSON.parse)。 在这些情况下,我已经阅读并亲自感觉最好的做法是将代码封装在try / catch块中,以避免和潜在的致命的意外。 这里有一些真正的代码与伪代码混合在一起: var getMonitorTimestamp = function() { return readLogFile() .then( function ok(contents) { //regex to capture dates in format of: 09 Jan 2015 09:42:01 var regex = /[0-9]{2} [\w]{3} [0-9]{4} ([0-9]{2}:){2}[0-9]{2}/g; var timestamp = contents.match(regex)[0]; var date; try { date = new Date(timestamp); return date; } //when I've caught […]

带有打字稿的Node.js需要和.d.ts文件

我想创build一个服务器端脚本,为此我需要“Q”,所以我包含了qdts文件。 我用这个来导入q: var Q = require("q"); 现在我收到这个错误:重复的标识符'Q' 有人知道如何解决这个名字冲突吗? 完整的启动脚本:+ ///<reference path="Scripts/typings/q/Qdts" /> ///<reference path="Server.ts" /> ///<reference path="Services/DatabaseProvider.ts" /> ///<reference path="Response/Response.ts" /> ///<reference path="Response/DataResponse.ts" /> var Q = require("q"); var di = require("ng-di"); var app = di.module("App", []); app.service("server", Server); app.service("$databaseProvider", DatabaseProvider); app.run((server: Server) => { server.run(); }); di.injector(["App"]);

我如何将Q promise与MongoDB cursor.each()一起使用?

我的代码的要点如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); return winCount/totalCount; } 这里显而易见的问题是,在return语句中,winCount和totalCount仍然等于0.我正在尝试使用Q promise库来整理一系列事件,但我不确定如何实现它。 有人可以告诉我怎么处理Q? 编辑 ID:10T错误在这里。 我忘了我正在使用和尚包装。 对于那些想知道我做了什么来解决这个问题的人,僧侣有一个很好的方式来处理承诺,方法如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; var promise = db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); promise.success(function(){ return winCount/totalCount); […]

Q.all请求promise的数组,不知道如何得到结果

这可能是一个明显的答案,但我不知道要采取什么方法。 请求是一个节点模块: https : //github.com/request/request我填写getHistory请求数组(具有不同的参数)。 p = [p1,p2 …]。 this.app.all('/api/heatmap', function(req,res) { // fill p here _.each(blabla, p.push(gethistory(someparams…) var result = []; function getHistory(params) { var options = { …}; var callback = function(error, response, body) { if(error) { //wtv } else { // what to do with the body here ? return body ? […]

处理内部asynchronous调用时,函数参数的作用域是什么?

在我的下面的例子中,其中一个快速应用callback的参数行为有所不同,取决于它们是否封装在辅助函数中。 我已经解决了我的问题,但我想更好地了解这里发生了什么。 getItem和buildView返回使用Q创build的buildView 。 下面的代码工作(即没有失败callback被称为): var app = require("express")(); app.get('/item/:itemId', function(req, res){ var showItem= function(item){ var s = function(x){res.send(x);}; buildView(item).then(s).fail(console.log); }; var showError = function(error){ res.send(error.message); }; getItem(req.params.exception_id) .then(showItem).fail(showError); }); 下面的代码不会(console.log打印[TypeError: Cannot read property 'req' of undefined] )): var app = require("express")(); app.get('/item/:itemId', function(req, res){ var showItem= function(item){ buildView(item).then(res.send).fail(console.log); }; var showError = function(error){ res.send(error.message); […]

承诺超时后停止执行

我一直在使用Q模块来实现我正在进行的一个项目的承诺。 我正在使用静态方法Q.fncall()创build一个node.js样式函数(基于callbackerr,结果)的承诺。 问题是我需要在一定的时间内停止执行这个函数,所以我使用了Q模块的“超时”function。 所以,经过了一段时间后,done函数的“错误”callback就会执行,让我来处理超时,但是函数本身不断的执行,直到它到达最后的callback,即使处理程序不再监听。 问题是:是否有任何方法来执行超时后停止执行一个函数? 我知道我可以在超时处理程序上设置一个variables,并在超时结束的时候继续检查函数,但是我希望能有一个更清晰的方法来实现。 代码如下: Q.nfcall(test1, id) .timeout(1000) .done( function (value) { console.log("SUCCESS: " + value); }, function (reason) { console.log("ERROR " + reason); }, function (progress) { console.log("PROGRESS " + progress); } ); 和test1函数: function test1(id,callback){ db_rw_pool.query("SELECT * FROM table WHERE id=?",[id], function(err,result) { if(err){ callback(err,null); } else { setTimeout(function(){ console.log("I DON'T […]

Javascript和承诺与Q – 封闭的承诺问题

我使用Node.js和Q编写服务器端的asynchronous代码。 我对诺言是新的(对于asynchronous编程我一般都是新手),而且我遇到了一些麻烦,我不能通过查看Q文档来解决这个问题。 这里是我的代码(这是coffeescript – 让我知道,如果你想看到的JavaScript): templates = {} promises = [] for type in ['html', 'text'] promises.push Q.nfcall(fs.readFile , "./email_templates/#{type}.ejs" , 'utf8' ).then (data)-> # the problem is right here – by the time # this function is called, we are done # iterating through the loop, and the value # of type is incorrect […]

节点返回从Q.async产生的值

有了这段代码: function * foo(ctx) { // process some things // yield some async stuff… return 'foo'; } Q.async(function * (ctx) { return yield foo(ctx); })(this).done(function(result) { console.log(result); }); 我期望的结果是foo() (即'foo' )的结果,但它是实际的发电机对象! 我在想什么,或者我在这里不明白? **解决scheme** 虽然答案是很好的解决办法,但我觉得我甚至可以通过简单的做法来缩短整个事情 result = Q.async(foo)(this);

Q.jsvariables并行传递

在实现承诺时得到了这样的代码: var MongoClient = require('mongodb').MongoClient MongoClient.connect(db_uri, function(err, db) { if(err) throw err; var ccoll = db.collection('cdata'); app.locals.dbstore = db; } var json= {} //Auth is a wrapped mongo collection var Auth = app.locals.Auth; var coll = app.locals.dbstore.collection('data'); var ucoll = app.locals.dbstore.collection('udata'); var ccoll = app.locals.dbstore.collection('cdata'); var Q = require('q'); //testing with certain _id in database […]