Tag: 承诺

什么是执行(显式和隐式)并行和在node.js中按顺序?

这个例子混淆了我对node.js如何工作的理解: // 1. numbers.forEach(function(number) { queue.push(Q.call(slowFunction, this, number)); }); // 2. // Q.all: execute an array of 'promises' and 'then' call either a resolve // callback (fulfilled promises) or reject callback (rejected promises) Q.all(queue).then(function(ful) { // All the results from Q.all are on the argument as an array console.log('fulfilled', ful); }, function(rej) { // The […]

如何使用Q-IO设置HTTP请求超时

我们使用Q和Q-IO将HTTP请求转换为承诺。 有时我们的要求会超时 – 对我们的口味来说太快了。 有没有办法设置这些“QHTTP”查询的超时时间? function promiseAQuery() { var QHttp = require( 'q-io/http' ); return QHttp.request({ url : 'http://www.domain.com/', method : 'GET' }); }

在使用q(promises)模块的Nodejs中,then()返回的值是多less?

我不是在问诺言的实现价值。 在这里我正在询问then()函数的返回值。 我所关心的具体事情是根据条件build立承诺清单,例如: function operationThatReturnsPromise() { var p = q.resolve({ prop1 : value1 }) .then(function(ctx) {…. return ctx;}); if (condition1) { // which usage is required or preferred? // 1. p = p.then() ? p = p.then(function(ctx) { ….. return ctx; } ); // 2. p.then() ? p.then(function(ctx) {… return ctx; }); } return p; […]

嵌套while循环承诺

我已经按照正确的方式编写了许诺的循环。 为成功创build承诺循环。 但是,似乎这种方法不适用于嵌套循环 我想要模拟的循环: var c = 0; while(c < 6) { console.log(c); var d = 100; while(d > 95) { console.log(d); d–; } c++; } (请注意,我在这里简化了promFunc()的逻辑,所以不要认为它是无用的) : var Promise = require('bluebird'); var promiseWhile = Promise.method(function(condition, action) { if (!condition()) return; return action().then(promiseWhile.bind(null, condition, action)); }); var promFunc = function() { return new Promise(function(resolve, reject) […]

我应该完全消除从我使用的代码(Bluebird)承诺的try / catch?

在我调用promisified函数之前,我有几个非常基本的设置步骤,我正在考虑将它们包装在try / catch块中,因为这似乎是最简单的方法。 不过,对我来说似乎有点肮脏。 我应该做一个返回一个Promise的函数,即使它很简单吗? 这是一个例子。 try thingyId = req.params.id # here I am 99.999% sure that params is defined, # but if for some bizarre reason it's not, I'd like to handle that error # instead of breaking the whole program catch console.log "error: " + e # do normal promisified functions 或者我应该写这个 setThingyId […]

与Sequelize交易不起作用

我想build立一个简单的networking表单,你可以input一个人的名字,姓氏,并为这个人select多个组(但现在是一个) 我正在使用node.js并将其存储在MariaDB数据库中。 Sequelize根据定义的模型创build了表Persons , Groups和GroupsPersons 。 var Sequelize = require("sequelize"); var sequelize = new Sequelize(config.database, config.username, config.password, config); var Group = sequelize.define("Group", { name: { type: DataTypes.STRING, allowNull: false } } var Person = sequelize.define("Person", { firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING, allowNull: false } } Person.belongsToMany(Group, {as: 'Groups'}); Group.belongsToMany(Person, […]

在Bluebird中返回被拒绝的promise和onPossiblyUnhandledRejection处理程序

我正在用这个模式编写很多代码,在Bluebird的文档中可以find类似的例子: var promise4 = Promise.join(promise1, promise2, function (value1, value2) { // promise 3 needs the values resolved from promise1 and promise2 return promise3(value1, value2); }); 我的error handling是这样完成的: Promise.all([ promise4 ]) .catch(function (err) { // handle error }); 问题是,如果promise3被拒绝,它会触发蓝鸟的onPossiblyUnhandledRejection处理程序,因为它被连接到任何承诺链(具有error handling)之前被拒绝。 当没有任何事情是错误的时候,这会导致大的错误信息被打印出来。 我不知道该怎么做,因为一方面,上面的模式对于构造并发逻辑非常有用,而且很容易理解,但是另一方面,我不想简单地覆盖onPossiblyUnhandledRejection,因为它可以如果我真的忘记处理一些事情 蓝鸟的文档types解决了这个问题,使得它听起来好像上面的模式是一个奇怪的: “如果你的代码由于某种原因需要突然冒出来,并附上error handling程序的承诺后一些承诺挂了一段时间,然后你会看到恼人的消息” 我的“某些原因”是我需要构build高度并发的软件。 这是我接近这种问题的根本缺陷吗? 如果没有,我应该如何解决这个问题,而不是完全删除这些警告?

用承诺等待事件

我很乐意在一个承诺中包装一个事件。 更具体地说,我很乐意有一个方法来承诺,从每个事件发回的价值。 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 […]

我如何解决量angular器testing中的两个不同的承诺?

我是一个Node.js的初学者。 我有一个承诺,从服务器下载一个文件,然后parsing成一个JSON对象,并将其返回。 另一个承诺返回一个网页元素()。 这两个承诺要接踵而至:首先是返回json对象的承诺,这个工作好,然后得到页面元素的承诺。 使用JSON对象中的一个键,我必须testing元素是否包含相同的文本。 码: var menuItems = element(by.id('menu')).all(by.tagName('li')); it('should contain', function (done) { jsonPromise.then(function () { // work console.log('Inside jsonPromise then'); menuItems.then(function () { //——> not step into console.log('Inside menuItems then'); expect(menuItems.get(0).getText()).toEqual(jsonData.home); done(); }); }); }); 用这个代码量angular器返回:1个testing,0个断言,0个失败为什么呢? 我究竟做错了什么? 注意:这两个控制台命令执行

我怎样才能解决这个Q.denodifytesting?

我正在使用一个数据库库,其基于callback的界面如下所示: var DB = { insert: function(options, callback) { } } 我想实现一个包装这个数据库来将其callback风格API转换为基于承诺的API。 要做到这一点,我已经定义了以下类: var DatabaseWrapper = { init: function(db) { this.db = db; }, insert: function(options) { return Q.denodeify(this.db.insert.bind(this.db))(options); } } 我想写一个unit testing,以确保当我调用DatabaseWrapper.insert它调用DB.insert 。 到目前为止,我的testing如下所示: describe('DatabaseWrapper', function () { var wrapper, insertSpy, bindStub; beforeEach(function () { wrapper = Object.create(DatabaseWrapper); insertSpy = sinon.spy(function () { console.log('insertSpy […]