Tag: 承诺

承诺拒绝不使用mysql错误

我试图得到返回一个MySQL数据使用承诺,它的工作原理,但是当我尝试在目的地创build一个错误的MySQL,但后来我得到这个错误。 (node:28464) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Users not found (node:28464) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 我到处检查,它说使用.catch,但奇怪的是,我使用catch但无法找出问题。 通常我想知道如何解决这个问题,而不是只知道正确的方法而继续下去。 这是模型 getAllUser = new Promise((resolve, reject) => { db.query('SELECT * from users', function (error, results, […]

使用Q在Node.js中同步诺言的麻烦

我目前在框架Sails.js Node.JS做一个API。 我第一次使用承诺,我有一些麻烦,像我想要的同步我的承诺。 我的主要function如下: createCard: function(req, res) { checkIfUserHasStripeAccount(req.user) .then(addCreditCardToStripeAccount()) .then(function cardCreated() { res.send(200, { msg: 'Card created' }); }) .catch(function handleError(err) { res.send(err.httpCode, err.msg); }) }, 很明显,如果用户没有信用卡,就无法将信用卡添加到条形账户。 函数checkIfUserHasStripeAccount()检查账户是否存在,如果没有,创build它。 这是这部分的代码: function checkIfUserHasStripeAccount(user) { var deferred = q.defer(); if (!user.idStripe) { createStripeAccountToUser(user) .then(function(savedUser) { deferred.resolve(savedUser); }) .catch(function(err) { deferred.reject(err); }) } else { deferred.resolve(user); } return […]

在Nodejs / Express中链接承诺的最佳实践

我知道在Nodejs / Express中链接promise的最佳方式是: doSomeThing() .then() .then() .catch(); 但最近不得不使用async和q模块遍历列表/数组并运行asynchronous函数。 我想知道是否有更好的方式来做/写这个 – var deferred = Q.defer(); var deferred2 = Q.defer(); models.Local.findOne({ where: { id: parseInt(req.body.localid) } }) .then(function(resultLocal){ if(!resultLocal){ return res.status(404).json( { "status" : "error", 'error': "Local Not Found" }); } return models.Documents.create(req.body.document); }) .then(function(docCreated){ var attributes = req.body.document.Attributes; async.each(attributes, function(item, callback) { models.Doc_Tags.create({ value: item.value, attribute_id: […]

Postgres承诺多个查询 – nodejs

阅读https://stackoverflow.com/a/14797359/4158593之后 :关于nodejs单线程,并且它需要asynchronous函数的第一个参数,处理它,然后使用callback来响应,当一切准备就绪。 我困惑的是,如果我有多个查询需要一次性完成,并告诉nodeJS通过将其添加到队列中来阻止其他请求。 为了做到这一点,我意识到我需要在另一个callback包装我的查询。 承诺做得很好。 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me']) .then((data) => { if(!data.rows[0].username) { psqlClient.query(`INSERT INTO usernames (username) VALUES ('me')`); } else { … } }); 在注册过程中使用此代码来检查在插入之前是否未使用用户名。 因此,nodejs将其他请求放入队列非常重要,并确保同时select和insert 。 由于此代码可能允许同时发送同一用户名的用户select已被使用的用户名,因此将插入两个用户名。 问题 上面的代码是否一次执行查询? 如果1是正确的,如果我要改变这样的代码 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me'], function(err, reply) […]

蓝鸟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时,请回答我应该使用什么。

扩大承诺以支持进度报告

所以我想扩展Promise有一个“进步”的一部分,以便我可以使用Promise为我的Async任务报告progrss。 因此,我延续了这样的承诺: class promisePro extends Promise { constructor(fn) { super(function (resolve, reject) { fn(resolve, reject, this._progress.bind(this)); }); } _progress(v) { if (this.progressCB) this.progressCB(v); } progress(fn) { this.progressCB = fn; } } 并用它: function ptest() { return new promisePro((resolve, reject, progress) => { setTimeout(() => { progress(0.3) }, 1000) setTimeout(() => { progress(0.6) }, 2000) setTimeout(() […]

用node-mysql,NodeJS和Q更新多行

我正在使用node-mysql,node-js和Q promise。 我已经成功更新,删除,并插入单行使用上述。 以及在我的testing用例场景中在单个语句中插入多行。 但是,我需要在单个查询或for循环中更新具有不同值(批处理模式)的多行。 关于如何在mysql2中使用预准备语句(应该在node-mysql上进行改进)的信息非常稀less,没有示例,尽pipe这应该是自然的select,同时还要承诺弥补node-jsasynchronous性。 另外,我在各种testing场景中成功地使用了defered.makeNodeResolver()。 我正在尝试更新多个行在一个单一的查询与where子句和改变条件。 当我更新单行时它正在工作。 但是,当我尝试用单个查询更新多行时,logging不会更新。 我准备切换到使用for循环来执行多个更新,然后汇总结果并将其从服务器发送回客户端,这将是我的第二个首选选项。 如果没有太多的performance,我不明白为什么不这样做。 但是我还没有find这样做的例子。 var values = [ { users: "tom", id: 101 }, { users: "george", id: 102 } ]; // var params = [values.users, values.id ]; var sql = 'UPDATE tabletest SET users = ? WHERE id = ?;'; connection.query(sql, [{users: values[0].users}, {id: values[0].id […]

mongoose权承诺拒绝处理

我在nodeJS中与诺言模式有点争斗 我正在寻找用户在分贝,然后用用户参考保存新的实体,但是当用户不在分贝,我应该返回拒绝,但我不知道如何做到这一点。 有没有办法如何更好地做到这一点? 顺便说一句:对不起,咖啡: – [ User.findOne({'fbId':userData.me.id}).exec().then((doc)-> if !doc? then return new Promise (resolve,reject)->reject(404) video = new Video({ user:doc state: "queue" createdAt: new Date() }) video.save().exec() )

NodeJStesting承诺

我正在尝试学习NodeJS中的testing承诺,而且我在其他语言中使用的testing方法在这里还是让我失望了。 基本的问题是“如何有效地testing一个或多个链接的(完成或捕获的)承诺块的间接input和输出? 这里是lib/test.js的源代码: var Bluebird = require("bluebird"), fs = Bluebird.promisifyAll(require("fs")); function read(file) { return fs.readFileAsync(file) .then(JSON.parse) .done(function () { console.log("Read " + file); }); } function main() { read("test.json"); } if (require.main === module) { main(); } module.exports = read; 这里是tests/test.js的来源 var Bluebird = require("bluebird"), chai = require("chai"), expect = chai.expect, sinon = require("sinon"), sandbox […]

如何创build一个RxJS缓冲区,将NodeJS中的元素进行分组,但不依赖于永远运行的时间间隔?

我在Rx.Observable.fromEvent中使用Rx.Observable.fromEvent捕获应用程序中的事件。 这些被发送到另一个服务器使用请求( https://www.npmjs.com/package/request )。 为了避免高networking负载,我需要在发送请求之间的给定超时时间内caching这些事件。 问题 使用bufferWithTime(200)将使节点进程保持运行,我不知道应用程序何时完成closuresstream。 有什么办法可以使用Rx缓冲区来说: 当元素1被按下时设定一个计时器 当元素2和3在定时器到期之前到达时,将它们推到数组[1,2,3](缓冲区) 计时器到期时,向pipe道发送[1,2,3]arrays。 如果元素4在计时器到期之后到来,那么设置一个新的计时器并重新开始。 如果没有元件被推动,则不启动将使过程退出的计时器。 我最初的做法是: Rx.Observable .fromEvent(eventEmitter, 'log') .bufferWithTime(200) // this is the issue .map(addEventsToRequestOption) .map(request) .flatMap(Promise.resolve) .subscribe(log('Response received'))