Tag: 承诺

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 […]

等待循环完成callback

来自PHP的背景,我试图让我的头在这个callback的东西。 基本上我想获得一些行,然后我想循环这些行,并检查他们对其他模型(不同的数据库)。 我希望回拨等待,直到他们都被循环和检查。 在sequelize遍历所有结果之前调用callback函数。 基本上我想要的function是“阻止”。 我需要改变什么? toexport.getlasttransactions = function(lower,upper,callback){ var deferred = Q.defer(); var transactionsToUpdate = []; /////////////////////////// // set import conditions // /////////////////////////// var lowerbound = (lower) ? lower.format() : moment.utc().subtract(10, 'minutes').format(); var upperbound = (upper) ? upper.format() : moment.utc().format(); /////////////////////////////// // get IDs From Failed syncs // /////////////////////////////// FailedSync.find({ limit: 100 }) .then(function(res){ […]

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); }); […]

如何尽早打破承诺链,在Express中发送错误?

我有这个请求处理程序,它看起来像这样: router.post('/', function(req,res) { var screencast; var channel; youtube.get(req.body.videoId).then(function(data) { screencast = data.screencast; channel = data.channel; }).then(function() { return connection.beginTransactionAsync(); }).then(function() { return connection.queryAsync('INSERT IGNORE INTO Channels SET ?', channel); }).then(function() { return connection.queryAsync('INSERT INTO Screencasts SET ?', screencast) }).then(function() { return connection.commit(); }).error(function(e) { connection.rollback(); }); }); 有时我想尽早打破承诺链,并发出错误。 这是我试过的: router.post('/', function(req,res) { var screencast; […]

Bluebird可以在node.js中使用redis吗?

这里是我原来的代码来获取存储在redis中的用户php会话: var session_obj; var key = socket.request.headers.cookie.session session.get('PHPREDIS_SESSION:'+key,function(err,data){ if( err ) { return console.error(err); } if ( !data === false) { session_obj = PHPUnserialize.unserializeSession(data); } /* … other functions … */ }) 我想用Promise重写代码,但是我不能得到返回的data : Promise.resolve(session.get('PHPREDIS_SESSION:'+key)).then(function(data){ return data; }).then(function(session){ console.log(session); // this returns true, but not the session data session_obj = PHPUnserialize.unserializeSession(session); }).catch(function(err){ console.log(err); }) session返回布尔值true而不是会话数据。 […]

链接asynchronous函数Node.js bluebird mongoskin

我一直在阅读很多关于如何链接asynchronous函数的文章,但我似乎无法做到这一点! 正如标题所示。 我试图将mongoskin数据库调用链接在一起,以便我可以将所有信息以块的forms收集,然后最终将响应中的累积结果发送出去。 我有这样的对象用户: var User = { username: 'someusername', accounts: [{name: 'account_1'}, {name: 'account_2'}] } 对于每个帐户,我需要收集数据,然后在响应中发送累积的数据。 所以我使用以下for循环遍历帐户: var promise = require('bluebird'); var db = require('mongoskin').db('mongodb://localhost/someDB'); for(var x in user.accounts){ //Fetch account data user.accounts[x].accountData = fetchAccountData(user.accounts[x].name); } //Finally send the collected response response.send(user); 而fetchAccountData函数如下所示: function fetchAccountData(screen_id){ db.collection('master') .aggregate([ {$match: {screen_id: screen_id}} ], function(err, res){ if(err) […]

node.js承诺错误的定义函数

我的问题是parsing大xml文件(与xml2js),forEach元素在周期(产品),下载图像,并将其保存到文件。 我写了这个代码: var fs = require('fs'); var request = require('request'); var parseString = require('xml2js').parseString; var baseUrl = 'http://shop.nag.ru/uploads/catalog_item_image_main/'; var async = require('async'); var processImg = require('./downloader'); var q = require('q'); var readFileSync = function (){ var xml = fs.readFileSync("./test.xml", "utf8"); return xml; }; readFileSync.then(function(xml) { parseString(xml, function (err, result) { if(err)return error; return result.product_list.product; }) […]

dynamic路线在科阿?

比方说,我有一个看起来像这样的路线数组: var routes = [ { route: '/', handler: function* () { this.body = yield render('home', template.home) } }, { route: '/about', handler: function* () { this.body = yield render('about', template.about) } } ]; 什么是最好的方式来app.use它们? 我尝试过这样做(用koa-route作为我的中间件): Promise.each(routes, function(r) { app.use(route.get(r.route, r.handler)); }).then(function() { app.use(function *NotFound(next) { this.status = 404; this.body = 'not found'; }); }); […]

为什么这个承诺默默地失败?

db.collection.findOne是一个asynchronous操作(MongoDB,但在这里并不重要),这就是为什么我在这里包装它的承诺。 var letsDoSomething = new Promise(function(resolve, reject){ db.collection('stackoverflow').findOne({question: true}, function(err, question){ resolve(question); // let's pretend we found a question here, and it is now resolving }) }) letsDoSomething.then(function(myData){ // it resolves console.log('foo', bar); // since 'bar' is undefined, this should fail – why doesn't it? No error messages, it goes completely silent }); 为什么当我尝试loginbar ,debugging器不会出现错误,这根本就不存在? […]

我应该在ES6节点项目中使用多less承诺?

在官方的蓝鸟承诺页面中写道,如果你使用的是node.js,那么我不太可能自己写承诺。 自从我开始一个新项目以来,我发现我所有的代码都围绕着诺言。 例如,我有一个数据库连接器,它返回一个承诺,一个承诺承诺的快速路由,testing承诺,承诺testing承诺,一般我没有写任何接收callback的函数。 我应该写callback模块,如果需要promisify他们? 有什么缺点?