Tag: 蓝鸟

丢失variables范围

所以,一旦我解决了我之前遇到的问题,我试图在login时从数据库中获取玩家帐户的X,Y坐标(所以它们不是放在1,1上,而是放在最后一个跟踪的坐标上) 经过一番debugging,我来到这个: var x; //note I also tried to define these directly above the getX/Y() and it didn't work var y; return con.getConnectionAsync().then(function(connection) { return connection.queryAsync('SELECT password,id FROM player WHERE name='+mysql.escape(req.body.user)) .spread(function(rows, fields) { if (hash.verify(req.body.pass,rows[0].password)) { req.session.loggedIn = true; req.session.user = rows[0].id; getX(rows[0].id,con,mysql).then(function(data) { x = data; }); getY(rows[0].id,con,mysql).then(function(data) { y = data; }); […]

Node.js:为“yield”关键字promisifyingcallback库

我试图用Koa.js构build一个简单的REST API。 它使用ES6生成器函数,我发现比callback更愉快(它们就像C#的asynchronous等待)。 yield关键字需要一个可接受的(promise,thunk,generator)。 我使用Bluebird的promisifyAll方法promisifycallback库(在我的情况下请求),但我仍然不断收到错误。 这是我的代码和错误: var koa = require('koa') , route = require('koa-route') , app = module.exports = koa() , Promise = require('bluebird') , request = Promise.promisifyAll(require('request')); app.use(route.get('/users', list)); function *list() { var res = yield request.get('http://backbonejs-beginner.herokuapp.com/users'); this.body = res.body; } app.listen(3000); 堆栈跟踪的错误: Error: yield a function, promise, generator, array, or object at next […]

我如何正确编写一个模块来与Bluebird的PromisifyAll兼容

比方说,在node.js模块moduleA.js ,我有以下一些节点式asynchronous函数: // moduleA.js var init = function (data, callback) { return callback(null, data.params ); }; var delay = function(data, callback) { setTimeout(function(){ callback(null, data); }, 1000*3); } var reverse = function(data, callback) { var j, d = {}; for(j in data) { d[ data[j] ] = j; } callback(null, d); } module.exports = { […]

有没有正确的方式来存储解决的承诺?

现在几乎每个节点包都有callbackAPI。 如果我正在编写包装器,ORM例如: const Promise = require('bluebird'); const mongo = Promise.promisifyAll(require('mongodb')); class ORM { constructor(mongoUrl) { this.db = mongo.connectAsync(mongoUrl); } collection(name) { return this.db.then((db) => { return db.collectionAsync(name); }); } } 这是正确的吗?

蓝鸟promisify与promisifyAll性能比较当想从模块promisification一个方法

我想知道蓝鸟promisify与promisifyAll之间的性能差异。 我已经尝试过蓝鸟 promisify和promisifyAll的性能testing。 但时间和记忆方面我并没有看到明显的差异,但我认为promisify是稍快,内存占用less。 仍然是最好的。 假设我想为只有1个方法renderFile的ejs模块renderFile promisification。 我有2个选项 const ejs = require('ejs'); const renderFile = Promise.promisify(ejs.renderFile, {context: ejs}); 要么 const ejs = Promise.promisifyAll(require('ejs')); 我通过testing性能 console.time('A'); console.timeEnd('A'); 和console.log(process.memoryUsage()); 当我想只有1方法的promisification时,请回答我应该使用什么。

未处理的拒绝错误。 即使testing通过

我正在testing这个function: UserController.prototype.getDashboard = function getDashboard(req, res, next) { let pages, user; return this.User.findById(req.user.id) .populate('club') .execAsync() .then(dbUser => { user = dbUser; FB.setAccessToken(user.token); return FB.getAsync('me/accounts') }) .then(fbPages => { pages = fbPages.data; return Promise.all(pages.map(page => { return FB.getAsync(`${page.id}/events`) .then(events => events) .catch(e => next(Boom.wrap(e))); })) }) .then(events => { let entity = { user, pages: _.map(pages, […]

如何从saveAsync返回一个Mongoose对象?

我已经promubified与蓝鸟mongoose – 似乎工作正常,除了由saveAsync()返回的文档只是普通的对象,缺乏方法/虚拟。 order.saveAsync().then(function(order) { order.save(); // errors with object has no method 'save' 我使用“保存”作为示例,但没有内置方法或我的自定义方法似乎可用。 我怎样才能得到一个从saveAsync返回的Mongoose对象?

蓝鸟 – 如何在嵌套承诺中传播错误

PromiseA().then(function(){ PromiseB().catch(function (e) { throw e; }) }).catch(function (e) { // I want exceptions thrown in the nested promise chain to end up here. }) 我如何从嵌套的承诺中获得exception,以达到父承诺?

如何正确的链承诺互相依赖的电话?

我有以下代码: const request = require('request-promise'); request(validateEmailOptions).then(function(result) { if (result.valid) { request(createUserOptions).then(function (response) { if (response.updatePassword) { request(modifyUserOptions).then(function (response) { return res.redirect('/signin'); }).catch(function(error) { return res.redirect('/error'); }); } }).catch(function(error) { return res.redirect('/error'); }); } else { return res.redirect('/error'); } }) .catch(function (reason) { return res.redirect('/error'); }); 基本上,这是一个请求调用链,每个请求调用都基于前一个调用的结果。 问题是,在每种情况下我都有更多的行,结果,我的代码变得臃肿,难以阅读和遵循。 我想知道是否有更好的方法来使用请求 – 承诺或简单的请求和蓝鸟来编写调用链。

如何访问Promise.map中的“this”?

我们知道,下面的this指的是window对象。 我想知道的是,我如何能够通过我的this背景而不诉诸于var self=this; 招。 有任何想法吗? 我尝试将.bind()添加到第9行的末尾,以便读取}).bind(this); 但是这也不起作用。 有任何想法吗? QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, function (company_batch) { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }); }; 编辑:我标记它,但应该提到,我使用蓝鸟。 编辑:修正了一个错字。