Tag: bluebird

Express.js – foreach数据数组并将其存储在数据库中

我使用expressjs,bookshelf.js,我想发布数据数组,foreach这样的数据,并保存它。 我不是很确定问题在哪里(expression式,书架或简单的旧javascript),但是这里是这样的情况:当我发布所述数组并尝试迭代它时,我得到了正确的数据保存量,但都具有数组中最后一项的值。 代码如下: router.post('/save/', function(req, res){ var data = req.body; var result = []; for (var i in data) { var d = data[i]; if (d.user_id == -1) d.user_id = null; new Term().where({'date_of_driving': d.day}) .fetch() .then(function(terms){ if (terms != null) { return new Term({'id':terms.id}).save(d).then(function(item_updated){}); } else { return new Term().save(d).then(function(item_saved){}); } }) .catch(function(error){ console.log(error); }); […]

testing使用SinonJs和Mocha来限制包含Promise Code Block的Route Handler

我有一个restify行动代码块如下: function retriveAll(req, res, next) { db.user .find({where: {id: 1}) .then(function(user){ res.send(user); }) .catch(function(details){ res.send(details.message); }) .finally(function(){ next(); }); } 我想testing这个动作,具体validationres.send()在这个代码块中被调用 。 稍后validationres.send()返回的数据。 我正在使用SinonJs和Mocha进行testing框架。 以上是上述方法的示例testing代码块。 describe('retrieveAll()', function() { reqStub = {}; resStub = {send: sinon.stub()}; nextStub = sinon.stub(); beforeEach(function() { module.retrieveAll(reqStub, resStub, nextStub); }); // this doesn't work // and the sub.calledCount is 0 // […]

处理成功的HTTP承诺,如果一个蓝鸟失败

我对Promises相当陌生,一直试图让这段代码正常工作。 这是我的。 var Promise = require('bluebird'); Promise.join(getProducts, getPricing, function(products, pricing) { console.log('products: ' + products.body); console.log('pricing: ' + pricing.body); // Add pricing to products here res.send(products.body); }) .catch(function(e) { console.log(e); res.sendStatus(500); }); 要求… 我想同时调用这两个API,并在两个完成时处理结果。 如果定价API失败,我仍然希望返回没有定价的产品。 如果产品API失败,我想错误发送500回到客户端。 我的代码似乎工作,如果两个API调用都成功,但总是进入捕获,如果失败,并忽略任何成功的调用。 如果我使用同步Promise链,我可以很好地工作,但是我想同时调用这两个API。 我怎样才能asynchronous调用这两个API并在catch之外处理结果?

在蓝鸟承诺内执行asynchronous操作

所以,我一直在殴打这个几天,我很难解决什么是最好的解决办法。 我正在使用HAPI的Waterline / dogwater,并试图做一些大致的事情: wardrobe.find({WardrobeId: 5}).then(function(clothes) { //got my clothes in my wardrobe. clothes.find({Type: 'trousers'},{Kind: 'nice ones'}).then(function(trousers) { //got my nice trousers _.each(trousers, function(trouser) { //logic to see if these are my pink trousers console.log('color?', trouser.color); }); console.log('ding'); }); }); 我遇到的麻烦是代码在输出裤子颜色之前总是会ding 。 这是因为,尽我所知, _.each将使代码asynchronous。 我试图介绍承诺(蓝鸟),但没有运气。 我甚至看过发生器(Co),但是我的节点版本在v0.11之前是固定的。 我想在_.each执行一些数据库查询,将这些结果(如果有的话)返回给裤子对象,然后返回: wardrobe.find({WardrobeId: 5}).then(function(clothes) { //got my clothes in my […]

在Nodejs中使用asynchronous等待redis和bluebird

纠正我,如果我在这里错了。 这就是我所做的 client = Promise.promisifyAll(redis.createClient()) let reply = await client.getAsync('foo_rand000000000000') console.log('reply',reply.toString()) 我得到Unexpected token错误。 我有这个在我的.babelrc { "presets": [ "es2015", "stage-3" ] } 有人可以指出我在这里做错了吗?

节点,蓝鸟承诺,MySQL,并需要一个僵硬的饮料

我正在努力使用MySql实现Bluebird承诺。 我觉得我很接近,但是我的问题开始变得复杂起来,我可以利用一些帮助回到正轨。 我有这个代码所有的callback工作,但我已经承诺与承诺。 目前的问题是,它不喜欢我的查询“那么”,如在: conn.query("DO DB STUFF").then(function(result){}); 首先,我有一个看起来像这样的connection.js文件。 我在代码中添加了一些注释。 (function () { var mysql = require("mysql"); var pool = mysql.createPool({ connectionLimit: 10, host: "localhost", user: "myuser", password: "password", database: "dbName" }); // stole this from http://stackoverflow.com/questions/24797314/how-will-a-promisified-mysql-module-work-with-nodejs exports.getConnection = function(){ return pool.getConnectionAsync().disposer(function(connection){ try{ connection.release(); } catch (e) {} }); }; })(); 然后我有一个“db访问”文件,看起来像这样: var Promise = require("bluebird"); […]

创build一个支持callback和承诺的Mongoose插件

我有一个Mongoose插件,目前只支持callback,我打算将其发布到npmjs,但我首先想确保它的工作方式就像现有的Mongoose函数/方法,它支持callback函数和一些内置的promise ,而你也可以指定你自己的承诺库 。 我想知道在我的库中实现相同function的最好方法是什么,这意味着我怎样才能同时支持callback和承诺? 我发现了一个类似的SO线程 ,但这是特定于蓝鸟,即使我喜欢使用,Id喜欢不承担它将被使用。 (另外,这篇文章看起来可能会过时,因为我nodeify在bluebird API文档中findnodeify 我想我可以只是做一些基本的逻辑,看看是否提供了一个函数作为参数之一,如果是的话,然后执行callback,如果没有,然后返回一个承诺…但我确定这是一个更简单的方法来做那。 此外,对于承诺,当我做出承诺的时候,我应该使用那些交给插件的Mongoose对象中的Promise ? 含义: module.exports = Mongoose => { // Just verifying, should I use this?.. const Promise = Mongoose.Promise return Mongoose.model( 'Foobar', new Mongoose.Schema({ /* … */ }) ) } 更新 关于最后一个问题,关于Promise对象在返回promise时引用什么,我尝试使用Mongoose.Promise如上所述,代码如下: module.exports = Mongoose => { const Promise = Mongoose.Promise const Schema = Mongoose.Schema const […]

nodejs – 帮助“promisifying”使用嵌套promise读取的文件

所以我最近钻研尝试了解承诺和背后的目的,由于JavaScript的asynchronous行为。 虽然我“理解”了我的理解,但我仍然在为如何促使某些东西返回未来价值而奋斗,然后执行新的代码块来做其他事情。 我使用的两个主要节点模块: PG-承诺 exceljs 我想要做的是读取一个文件,然后一旦完全读取,迭代每个工作表执行DB命令。 然后一旦所有的工作表被处理,回去删除我读的原始文件。 这是我有的代码。 我有工作到一切写入数据库就好了,即使有多个工作表 。 我没有工作是设置它来确定所有的工作表已经完全处理,然后去除文件 workbook.csv.readFile(fileName) .then(function () { // this array I was going to use to somehow populate a true/false array. // Then when done with each sheet, push a true into the array. // When all elements were true could signify all the processing is done… […]

用承诺等待事件

我很乐意在一个承诺中包装一个事件。 更具体地说,我很乐意有一个方法来承诺,从每个事件发回的价值。 var events = require('events') var eventEmitter = new events.EventEmitter() eventEmitter.on("add", function(data){ console.log(data+1) return data+1 }) eventEmitter.emit('add', 5) eventEmitter.emit('add', 3) setTimeout(function(){ eventEmitter.emit('add', 13) }, 1000) setTimeout(function(){ eventEmitter.emit('add', 10) }, 3000) 这是一个会发出6,4,14,11的事件。 我所喜欢的是一个承诺包装,返回[6, 4, 14, 11] 。 //eventWrapper(emissions, event, [eventArguments]) eventWrapper(4, eventEmitter, "add").then(console.log) // [6, 4, 14, 11] 理想的情况下,也有一个超时的论点,如果排放不返回,并在x秒内达到排放量有错误。 最后(我知道这已经达到了一些),但是对于socket.io来说,有一个问题是广播的处理程序不会返回callback,在这个非常特殊的用途中,事件可以被代理为由一个完全不同的事件处理,像这样。 eventEmitter.on("callback", function(data){ console.log(data+1) return data+1 […]

用蓝鸟提升Nodemailer?

nodemailer作者明确表示他不支持promise。 我以为我会尝试使用蓝鸟,但我的尝试似乎没有捕获任何错误,Nodemailer抛出: var nodemailer = require('nodemailer'); var Promise = require('bluebird'); // build the transport with promises var transport = Promise.promisifyAll( nodemailer.createTransport({…}) ); module.exports = { doit = function() { // Use bluebird Async return transport.sendMailAsync({…}); } } 然后我这样做: doit().then(function() { console.log("success!"); }).catch(function(err) { console.log("There has been an error"); }); 但是,当提供无效的电子邮件时,我看到: Unhandled rejection Error: Can't send […]