Tag: 承诺

为什么我的迭代器再次进入?

我有以下程序 – 我使用genny.js来处理asynchronousstream量控制 – 我已经尝试与suspend.js相同 – 类似的错误。 我正在使用Stripe nodejs API。 我的迭代函数似乎被调用两次 – 这是造成一个错误 – 我不明白为什么被调用两次。 这一定是一个简单的思维把戏,我没有看到。 var genny = require('genny') genny.longStackSupport = true var stripe = require("stripe")("sk_live_….") fetchCharges = genny.fn(function* (d) { console.log("Before fetchCharges") var charges = yield fetchList(d()) console.log("After fetchCharges – found ", charges.length) return true }) fetchList = genny.fn(function* (done) { console.log("before fetchList") […]

蓝鸟承诺链:与结果“抓”

为了使这个问题对尽可能多的人有用,除了我在下面使用Node + Express的Bluebird承诺库之外,我将排除我的具体实现细节。 所以,假设我有下面的链( P返回一个promise, res是Express HTTP响应对象): P().then(function(){ // do nothing if all went well (for now) // we only care if there is an error }).catch(function(error){ res.status(500).send("An error occurred"); }).then(function(){ return P(); }).then(function(pVal1){ return [pVal1, P()]; }) // TODO: catch an error from P() here and log pVal1 .spread(function(pVal1, pVal2){ if(pVal1 === pVal2) { […]

承诺正在等待

我在我的nodejs应用程序中有一个类,下面的代码: var mongoose = require('mongoose'); var Roles = mongoose.model('roles'); var Promise = require("bluebird"); module.exports = Role; var err = null; var id; function Role(name, companyId) { this.err = err; this.name = name; this.companyId = companyId; this.id = getId(name, companyId); } var getId = function (name, companyId) { return new Promise(function(resolve, reject) { Roles.findOne({companyId:companyId, name:name}, function(err,result) […]

使用PDF承诺在Firebase云端函数中使用

我正在使用PDFMake(PDFKit的变体)使用实时数据库触发器在Firebase云端函数上生成PDF。 该函数从数据库获取所有相关数据,然后将其传递给应该生成PDF的函数。 所有这些都是使用Promises完成的。 一切正常,直到PDF实际生成的点。 以下是我的主事件侦听器中的代码: exports.handler = (admin, event, storage) => { const quotationData = event.data.val(); // We must return a Promise when performing async tasks inside Functions // Eg: Writing to realtime db const companyId = event.params.companyId; settings.getCompanyProfile(admin, companyId) .then((profile) => { return quotPdfHelper.generatePDF(fonts, profile, quotationData, storage); }) .then(() => { console.log('Generation Successful. Pass […]

在执行callback时,在Node.js中打破Q承诺?

请以承诺为理由,请原谅我的新手。 我在Node.js中使用Q模块 我有一个函数,一旦执行了所有必要的步骤,就会调用callback函数。 当我想从Q promise中调用callback函数时就会出现问题。 我希望的function是能够在达到最后一步时调用callback函数,而不再是承诺链中。 因此,callback将恢复到原来的操作状态。 但是,正如我编写的那样,callback在promise的上下文中被调用。 在这一点上,如果callback(比如说)抛出一个错误,它会被这个函数中的error handling程序捕获,这不是我想要的! var updateDataStream = function(data, input, posts, stream, callback) { // Pack all the items up… Q.ncall(data._packStream, data, posts, stream) // Upsert the cache into the database .then(function(){ return Q.ncall(data.upsert, data); }) // buffer the new input .then(function(res){ return Q.ncall(data.buffer, data, input); }) .then(function(final){ callback(null, final); […]

Async.js – ETIMEDOUT和callback已经被调用

当我运行index.js时,我不断收到ETIMEDOUT或ECONNRESET错误,后面跟着一个Callback was already called错误。 起初我以为是因为在调用onEachLimitItemcallbackonEachLimitItem之前我没有包含return 。 所以我将其包含在asynchronous多个callback文档中 。 仍然没有解决它。 我也尝试删除错误事件,并在错误事件中删除onEachLimit的callback,但都没有工作。 我已经看过围绕Callback already called的Callback already called问题的其他SO问题,但是由于他们不关心stream,我没有find解决scheme。 我的理解是,如果stream遇到像ECONNRESET这样的错误,它将返回错误事件中的callback,并继续到下一个stream,但似乎并不是这样。 几乎看起来,如果错误自行解决,即它重新连接,并尝试再次发送到Azure错误的蒸汽,它的工作,然后触发“完成”事件,我们得到了Callback already called的Callback already called 。 我是否正确处理stream事件中的callback? var Q = require('q'); var async = require('async'); var webshot = require('webshot'); var Readable = require('stream').Readable; var azure = require('azure-storage'); var blob = azure.createBlobService('123', '112244'); var container = 'awesome'; var countries = […]

使用蓝鸟与未定义的成功callback函数

我在memcached上使用蓝鸟库。 memcached.set('foo', 'bar', 10, function (err) { /* stuff */ }); 这个函数不会在第二个参数中调用成功callback,所以看起来像。然后(res)函数不会被调用。 Promise.promisifyAll(memcached); memcached.setAsync(hashedCacheKey, obj).then(function (res) { resolve(res); }).catch(function (err) { reject(err, null); }); 有没有办法处理未成功的事件?

在node.js中永远重复这一组操作

我正在使用node.js 我有这个function,它使用承诺在执行某些操作之间引入延迟。 function do_consecutive_action() { Promise.resolve() .then(() => do_X() ) .then(() => Delay(1000)) .then(() => do_Y()) .then(() => Delay(1000)) .then(() => do_X()) .then(() => Delay(1000)) .then(() => do_Y()) ; } 我想要做的就是让这一套行动永远重演。 这怎么能在node.js中完成? //make following actions repeat forever do_X() Delay(1000) do_Y() Delay(1000) 编辑:我开始赏金的答案,使用重复队列来解决问题。

mongoose和Q承诺

我正在从这里的mongoose / q promises框架样例开始工作 ,但在尝试使用findOne时似乎遇到了nfbind的一些问题,主要是因为Q框架中的样本似乎不符合要点。 我的代码: var mongoose = require('mongoose'); var Q = require('q'); var user_schema = mongoose.Schema({username:String, last_touched:Date, app_ids:[String]}); var user = mongoose.model('user', user_schema); exports.user = user; exports.user.find = Q.nfbind(user.find); exports.user.findOne = Q.nfbind(user.findOne); 如果我调用user.findOne({username:'test'}).then(function(err, user) { … } ,用户总是未定义。如果我删除导出并使用callback的非诺言版本,我得到了用户,我错过了一些特殊的魔法,但是在看了代码实现之后,来自Q github和mongoose演示的例子…没有什么真正跳出来的。用Q做一个findOne工作? 我也尝试在源代码中而不是在模块中设置nfbind函数,但无济于事。

蓝鸟PromisifyAll没有任何asynchronous后缀,即取代原来的function可能?

Bluebird有一个promisifyAll函数,它“通过遍历对象的属性来提升整个对象,并在对象及其原型链上创build每个函数的asynchronous等价物”。 它使用后缀Async创build函数。 是否有可能完全取代旧的function? 被replace的函数就像原来的函数一样工作,另外它们也返回一个Promise,所以我认为完全replace旧函数应该是安全的。 var object = {}; object.fn = function(arg, cb) { cb(null,1) }; Bluebird.promisifyAll(object); object.fn // do not want object.fnAsync // => should replace `object.fn` 有一个选项来指定一个自定义后缀选项,但不幸的是它不适用于空string Bluebird.promisifyAll(object, {suffix: ''}); RangeError: suffix must be a valid identifier