Articles of 承诺

在一个循环内承诺

在下面的代码中,我有一个无限循环,我不知道为什么会发生。 我最好的猜测是因为里面的函数是async的循环不等待它,所以循环不会停止。 解决这个问题的最好方法是什么? var generateToken = function(userId) { return new Promise(function(resolve, reject) { User.findOne({userId: userId}, function(err, user) { if (user !== null) { var loop = true; while (loop) { var token = Common.randomGenerator(20); (function(e) { User.find({tokens: e}, function(err, result) { if (err) { loop = false; reject('Error querying the database'); } else { if […]

如何理解这个Promise代码?

'use strict'; Promise.resolve(() => 'John') .then((args) => { console.log(args); throw new Error('ops') }) .catch((ex) => { console.log(ex) }) .then(() => { throw new Error('ups') console.log('Doe') }) 我想console.log(args); 应输出'John' ,但是当我运行这个代码,输出是[ [Function] ] 所以我很困惑。

Node.js Q承诺,为什么使用defer()的时候可以使用this()?

我想做一些事情: somePromiseFunc(value1) .then(function(value2, callback) { // insert the next then() into this function: funcWithCallback(callback); }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 它没有工作。 我无法得到它的工作。 我被build议使用defer()来达到这个目的。 他们自己的文档说,我们应该使用延迟callback式函数。 虽然这是令人困惑的,因为他们着名的金字塔榜样都是关于callback的,但是这个例子太抽象了。 因此,我看到很多使用defer的人,那就是我所做的: somePromiseFunc(value1) .then(function(value2) { var promise = q.defer(); funcWithCallback(function(err, dronesYouAreLookingFor){ if (!err) promise.resolve(dronesYouAreLookingFor); else promise.reject(new Error(err)); }); return promise.promise; }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 直到我通过检查源代码发现这也起作用: […]

node.js链多重承诺(mongoose)

以下是我正在处理的典型承诺函数。 var _delete = function(t, id) { return Promise.cast(Event.find({where: {id: id}}, {transaction: t})) .then(function(d){ if (d) { // ——- (*) return Promise.cast(d.updateAttributes({status: -1}, {transaction: t})) .then(function(){ // do inventory stuff return Promise.cast(Inventory.update({}).exec()) .then(function(d){ // do something }) }).then(function(){ // do product stuff return Promise.cast(Product.update({}).exec()) .then(function(d){ // do something }) }) } else { return Promise.reject('this […]

与本地承诺循环;

我试图做一个asynchronous循环与本地ES6承诺 这种作品,但不正确的。 我想我在某个地方犯了一个大错,我需要有人告诉我它在哪里以及它是如何正确完成的 var i = 0; //creates sample resolver function payloadGenerator(){ return function(resolve) { setTimeout(function(){ i++; resolve(); }, 300) } } // creates resolver that fulfills the promise if condition is false, otherwise rejects the promise. // Used only for routing purpose function controller(condition){ return function(resolve, reject) { console.log('i =', i); condition ? reject('fin') […]

cursor.toArray()返回一个promise而不是array

目前使用节点4.3.2和mongo 2.6。 我正试图获得一个完整的集合(目前在集合中的三个文档)。 当我使用这段代码时遇到了一个问题。 function checkUpdateTime(last_updated){ var collection = db.collection(last_updated); collection.insert({a:1}); updateTimes = collection.find({a:1}).toArray(); } var updateTimes = []; checkUpdateTime('last_updated'); console.log(updateTimes); 当这个代码是tun updateTimes是一个承诺,而不是我希望的数组。 目标是编辑数组,然后将其插回到集合中。插入语句有效,但是文档的检索根本无法按我期望的方式操作。 我已经尝试了这个代码的不less版本,但没有骰子。 我想这归结于我想知道为什么一个承诺被退回?

“Q.when”的蓝鸟相当于什么?

从Q切换到Bluebird ,我只是想确保它在文化上是正确的:是否有一个相当于Q.when(someValue); 或Q(someValue); ? 它是Promise.resolve(someValue); ?

与Bluebird手动promisifying pg.connect

我想promisify node-postgres'pg.connect方法以及callback中提供的内部connection.query方法。 我可以将后者进行修改,但是我需要手动执行第一个(如果我在这里丢失了某些东西,请解释一下)。 事情是,我不确定这段代码是否正确或应该改进? 代码工作,我只是想知道,如果我使用蓝鸟的意思。 // aliases var asPromise = Promise.promisify; // save reference to original method var connect = pg.connect.bind(pg); // promisify method pg.connect = function (data) { var deferred = Promise.defer(); connect(data, function promisify(err, connection, release) { if (err) return deferred.reject(err); // promisify query factory connection.query = asPromise(connection.query, connection); // resolve promised connection […]

在承诺中返回promise和返回undefined之间的区别

我不太清楚这两种常见情况之间的区别。 说我们有这个: user.save().then(function(val){ anotherPromise1(val); }).then(function(val){ anotherPromise2(val); }).catch(function(err){ }); 与: user.save().then(function(val){ return anotherPromise1(val); }).then(function(val){ return anotherPromise2(val); }).catch(function(err){ }); 我知道这有所作为,但究竟如何?

将Q迁移到BlueBird(或Vow)

我目前在Node / amqp应用程序中使用Q promise库。 我已经读过,像BlueBird或者Vow这样的Q库的性能是不太好的。 不幸的是,我不知道如何使用BlueBird(或Vow)来取代我目前的Q使用模式。 这是一个例子: this.Start = Q(ampq.connect(url, { heartbeat: heartbeat })) .then((connection) => { this.Connection = connection; return Q(connection.createConfirmChannel()); }) .then((channel) => { this.ConfirmChannel = channel; channel.on('error', this.handleChannelError); return true; }); 我应该提到 – 我正在使用TypeScript …在这个例子中,我正在接受一个amqplib承诺,并创build一个Q承诺(因为我不喜欢amqplib承诺)。 我如何用BlueBird或Vow做到这一点? 另一个例子是: public myMethod(): Q.Promise<boolean> { var ackDeferred = Q.defer<boolean>(); var handleChannelConfirm = (err, ok): void => […]