Articles of bluebird

NodeJS mysql2蓝鸟?

一直在testingMySQL vs mysql2,似乎2已经做了一些改进,但它不是一个确切的下降替代。 在同一时间Q是一个好的图书馆,似乎更容易整合,但蓝鸟似乎采取更less的内存和运行更快,所以… 我目前的mysql–bluebird连接器如下所示,并且允许直接使用query('SELECT email FROM users.users WHERE id=?',id).then(function(res){var email=res[0][0];}); /* global module, require */ var conf=require('./conf.js').conf; var mysql = require('mysql'); var Promise = require('bluebird'); var using = Promise.using; Promise.promisifyAll(require('mysql/lib/Connection').prototype); Promise.promisifyAll(require('mysql/lib/Pool').prototype); var pool = mysql.createPool(conf.mysql); var getConnection = function () { return pool.getConnectionAsync().disposer(function (connection) { return connection.release(); }); }; var query = function (command) […]

rethinkDB,然后查询结果

我正在使用nodeJS与本机rethinkDB驱动程序,并有一个基本的select3列查询如下: var runQuery = function() { var items = []; r.connect({host: 'someHost', port:28015, db:'test'}) .then(function(c){ r.table('ebb1') .pluck("col1","col2","col3") .run(c, function(err,cursor){ cursor.each(function(err,result){ if(err) throw err; items.push(result); }) }) }).then(console.log(items)) } 我尝试使用cursor.toArray()build议重新考虑文档,但我得到一个null,当我尝试返回这个,我认为结果太大。 当我在cursor.each()函数console.log(result)我看到我期望的结果,所以我相信他们被推到items数组,但我不确定如何适当地引用列表后,它是完全填充结果数据。 任何帮助或指导,将不胜感激!

复杂的child_process不能与Promise蓝鸟一起工作

我不想使用node.js中的child_process执行shell命令https://nodejs.org/api/child_process.html ,我在做一个使用React JS的电子程序。 我想用bluebird来做一个Promise,我的函数可以工作,但是对于像'ls'这样的小命令,但是如果我想在一个文件夹中执行一个简单的hello world程序,我想要这样做: cd localbuild/login/ && java Main 。 这是在我的terminal上工作。 当我试图在我的function做到这一点我有这个错误: promise rejected: Error: spawn cd localbuild/login/ ENOENT closing code: -2 。 这是我的function: _compile(command){ var Promise = require('bluebird'); var exec = require('child_process').execFile; var pathFile = "cd localbuild/login/"; function promiseFromChildProcess(child) { return new Promise(function (resolve, reject) { child.addListener("error", reject); child.addListener("exit", resolve); }); } var […]

如何在蓝鸟协同程序中使用http模块?

如何使用http与蓝鸟。 以下代码没有任何回应 var Promise = require('bluebird'); var co = Promise.coroutine; http = Promise.promisifyAll(require('http')); co(function*(){ var resp = yield http.get("http://i3.ytimg.com/vi/J—aiyznGQ/mqdefault.jpg").endAsync(); console.log(JSON.stringify(resp.body)); })();

Promisify自定义方法

我对Node和JS世界相当陌生。 我要实现的目标是“模块化”我的查询,并在各种情况下重用它们。 这是我的dbpipe理器: 'use strict' const mysql = require('mysql') var Promise = require('bluebird') var using = Promise.using Promise.promisifyAll(require('mysql/lib/Connection').prototype) Promise.promisifyAll(require('mysql/lib/Pool').prototype) const config = require('./config') var pool = mysql.createPool({ connectionLimit: 100, host: config.dbHost, user: config.dbUser, password: config.dbPassword, database: config.db, debug: config.dbDebug }) var getConnection = function () { return pool.getConnectionAsync() .disposer(function (connection) { return connection.release() }) } […]

node.js:蓝鸟替代async.whilst?

我想运行一个while循环,这取决于每次迭代更新的条件。 现在的挑战是每次迭代中的代码都是asynchronous的。 一种通过使用async.whilst()来实现这一点的方法。 不过,我正在试图寻找一个使用蓝鸟承诺的替代品。 有没有这样的替代品?

如何使用Node.js上的co模块捕获exception?

我在帆框架上使用co模块进行编码。 我想捕获InvalidError,但错误日志说'未定义'。 我怎样才能解决这个代码? Co模块不能捕获ErrorType规范? detail: function (req, res) { co(function *() { let errors = []; const text = req.param('text'); if (text.length <= 0) { throw new InvalidError('text is required'); } }).catch((InvalidError, err) => { sails.log.warn(err); errors.push(err.message); req.flash('errors', errors); res.redirect('/somewhere/view'); }).catch((Error, err) => { sails.log.error(err); res.serverError(err); }); } 错误日志在这里 warn: undefined error: undefined error: Sending […]

从承诺中的callback中检索数据?

我现在有以下一段代码: const Promise = require('bluebird'); const readFile = Promise.promisify(fs.readFile); recordPerfMetrics: function(url) { var self = this; var perf, loadTime, domInteractive, firstPaint; var perfData = {}; readFile('urls.txt', 'UTF-8').then(function (urls, err) { if (err) { return console.log(err); } var urls = urls.split("\n"); urls.shift(); urls.forEach(function(url) { console.log(url); self.getStats(url).then(function(data) { data = data[0]; loadTime = (data.loadEventEnd – data.navigationStart)/1000 + […]

Sequelize JS / Bluebird:从asynchronous并行数据库调用开始

我有个问题。 我想开始2分贝的电话,然后继续承诺链。 我做的一个相当怪异的做法是像这样开始承诺: db.Model.find().then(function() { return [ firstcall, secondcall ] }).spread(function(resultFromFirstCall, resultFromSecondCall) { //do something once both calls completed }); 用空数据库调用启动promise链可以吗? 或者,还有更好的方法。 我知道我可以引入asynchronous库,但是我认为这是一个更清洁的方法,如果没有性能影响,使空的db.Model.find()调用。

为什么这个蓝鸟PG代码挂起?

我试图围绕蓝鸟诺言包裹头,并通过文档中的一些例子。 我目前的代码是基于这个例子 : var Promise = require('bluebird'); var pg = Promise.promisifyAll(require('pg')); var using = Promise.using; function getConnection(string) { var close; return pg.connectAsync(string).spread(function(client, done) { close = done; return client; }).disposer(function() { console.log('In disposer'); try { if (close) close(); } catch(e) {}; }); }; using(getConnection('/var/run/postgresql dc'), function(conn) { console.log('Got a connection'); return conn.queryAsync('SELECT 1'); }) .then(function(rows) […]