Tag: 蓝鸟

为什么在使用诺基亚时使用Q,蓝鸟框架?

在node.js学习承诺期间 我有一些疑问。 'promise'已经在node.js中定义了 但通常它似乎使用额外的承诺框架,如Q,蓝鸟,RSVP等 有什么理由吗? 核心node.js函数是不是可以用promise.denodeify函数来支持promise?

蓝鸟承诺 – 不正确的履行顺序?

在我的expressJS应用程序中,我正在尝试运行2asynchronous承诺函数使用thennable返回… connect2Redis(config.cache) .then(connect2db()) .then(function() { console.log("Accounting Server started successfully!"); }) }) .catch(function(e){ console.error("Failed to start Accounting server. Error: ", e); }) 两个fns的“connect2Redis”和“connect2db”实现如下: function connect2Redis(opts) { var connectingMsg = "Connecting to Redis Cache @" + config.cache.host + ":" +config.cache.port; process.stdout.write(connectingMsg); return new Promise(function(resolve, reject){ var redisClient = redis.createClient(opts); redisClient.on('ready', function(){ console.log(" [ " + "OK".green + […]

如何将承诺join承诺链

我有func1函数返回一个promise。 在func2我已经开始承诺链。 我想在这里做的是,我想在旧诺言链中使用func1parsing消息,我想这个代码是不那么复杂。 joinfunc1的最好方法是在func2承诺链 var func1 = function(){ return new promise(function(resolve, reject){ //some operations here }); }; var func2 = function(){ promise.resolve(someFuncSync()) .then(function(){ //this is the old promise chain func1() .then(function(message,error){ return message; //i want use this return value in old promise chain }); console.log(message); //printing func1 returned message in old promise chain }) };

如何正确使用Promise.all()和然后()与asynchronous函数?

在下面的代码中,我试图把第一个和第二个查询的结果放在一个名为result的全局variables中。 问题是Promise.all()没有等待查询完成, then() 。 我该如何解决? 码: var result = {}; Promise.all([ connection.query('SELECT * FROM analysis', function(err, rows, fields) { if (err) throw err; result.analysis = rows; console.log("query 1"); }), connection.query('SELECT * FROM analysis_description', function(err, rows, fields) { if (err) throw err; result.analysis_description = rows; console.log("query 2"); }) ]) .then(function(result){ console.log(result); console.log("result"); }); 输出: result query […]

用knex.js插入嵌套logging

我们有一个数据库模式如下: students表 | id | 名字| 地址| 一个学生有多个教育历史。 education_histories表 | id | 度| 大学| student_id | student_id是指向学生表的外键 我们从客户端获得JSON结构,如下所示: { "name" :"Ram Neupane", "address": "Kathmandu, Bagmati", "education_histories": [ { "degree": "I.Sc.", "university": "Tribhuvan University" }, { "degree": "BE", "university": "Tribhuvan University" } ] } 我是Node.js和Knex.js的新手 。 我想用Knex的蓝鸟承诺在数据库中插入student和嵌套的education history 。 我怎么解决这个问题。 我已经尝试了以下诺言: function create (jsonParam) { return […]

如何在then()中传递bluebirdcallback的参数?

我有一个回报的承诺。 在这一刻,我这样做: Something( … ) .then(()=>{console.log("Done.");}); 这会更实际: Something( … ) .then(console.log, "Done."); 例如, setTimeout工作原理是这样的: setTimeout(console.log, 1000, "Done."); 蓝鸟有任何方法吗? 我的目标是要有这个实际的select来减less承诺产生的已经很荒谬的代码量。

蓝鸟promise.all不尊重结果顺序

我正在使用最新的稳定的蓝鸟: "bluebird": "~3.4.0", 并用下面的代码: Promise.all([ParticipantsService.retrieveActiveParticipantsFromTheLocalDb(), EventService.retrieveActiveEventsFromTheLocalDb(), HeatService.retrieveActiveHeatsFromTheLocalDb()]).then( function (results) { var namedResults = {participants: results[0], events: results[1], heats: results[2]}; return res.render('runners/runners', namedResults); }).catch( function (err) { winston.error('Failed to retrieve participants and or event details', err); return res.send(err); }); 我希望namedResults总是有正确的顺序排列的元素匹配的承诺数组的顺序,但这是不正确的! 我每次都有不同的顺序。 我假设这是因为它是蓝鸟的文档上说的: http : //bluebirdjs.com/docs/api/promise.all.html除非我读这个错误… 谁能帮忙? 谢谢

承诺的节点骑士

我正在尝试使用骑士的评估function。 一个简单的例子: var Horseman = require('node-horseman'); var horseman = new Horseman(); horseman .open('http://google.com') .evaluate(function() { var promise = new Promise(function(resolve,reject){ setTimeout(function(){resolve("Hello")},2000); }); return promise; }) .then(function(mesg){ console.log(mesg); }) .close(); 我期待解决的价值“你好”被传递到下一个函数作为mesg参数当承诺履行,但相反,我得到以下错误: Unhandled rejection fn evaluate global code evaluateJavaScript@[native code] evaluate@phantomjs://platform/webpage.js:390:39 我错过了什么吗?

JavaScript承诺依赖性处理

我有下面的代码示例。 var Promise = require('bluebird'); var model = function (object) { this.name = object.name; }; model.prototype.download = function () { var self = this; return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, Math.random() * 100) }); }; model.prototype.process = function () { var self = this; return new Promise(function (resolve, reject) { […]

Promise.all无效迭代抛出生成器

试图了解Javascript生成器和承诺,我已经检查他们是好的ALAX。 我需要迭代抛出承诺的协程( Promise.coroutine来自Bluebird的libray),使得按照正确的顺序执行一些承诺是很容易的。 有了这个代码(抱歉延迟的反模式,我会学习,以避免它): function myPromise(x,time,i){ var deferred = Q.defer(); setTimeout(() => { deferred.resolve(x + i); },time); return deferred.promise; } router.get('/', function(req, res, next) { for (var i = 0; i < 5; i++) { Promise.coroutine(function*(i) { var a = yield myPromise('a',6000,i); var b = yield myPromise('b',1000,i); console.log(a,b); })(i) .then(() => { console.log('Then'); }). catch((err) […]