Tag: 蓝鸟

done()完成与Javascript承诺中的catch()完全相同的事情(使用sequelize和bluebird)?

我试图让我的Express应用程序尽可能相似地处理所有请求。 我有一个服务器,处理所有的callback和厄运金字塔是可怕的。 我也很难确保所有的电话都有回应。 所以我正在迁移到基于Promise的系统(sequelize,它利用蓝鸟的承诺库)。 我读过最好总是跟进一个.catch(function(err){ report it }调用。 .done()完成相同的事情? 我的想法(可能是天真的)是,我可以在.done(success, failure)函数中处理所有res.status(x).send(y)调用。 failure抓住一切catch()会(? 在done()函数中发送所有响应是否错误(所有成功消息都success ,所有失败/错误消息failure ? 编辑 – 我发现sequelize使用蓝鸟的诺言库,所以done()已被depricted finally() 。 但是, finally()没有在函数中使用参数,所以似乎我不能将所有数据发送到finally()并在那里处理它。

我怎么知道哪些处理程序在承诺中抛出错误?

假设我有一个承诺如下: p.then(Task1) .then(Task2) .then(Task3) .catch(errorHandler); 当Task2遇到错误时,如何知道错误是从Task2中捕获的 ?

使用承诺而不是事件callback

我有以下的代码,这个所有的代码是在指定的函数myFunc ,我需要的所有function将完成(myFunc),即当文件成功提取/或不返回一些状态(成功/错误) var myFunc = () => { var DecompressZip = require('decompress-zip'); var unzipper = new DecompressZip(filename) unzipper.on('error', function (err) { console.log('Caught an error'); }); unzipper.on('extract', function (log) { console.log('Finished extracting'); }); unzipper.on('progress', function (fileIndex, fileCount) { console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount); }); unzipper.extract({ path: 'some/path', filter: […]

MongoDB – 两个更新顺序相互重叠

我们正在为我们的系统build立规模计算机制。 为了计算大小,我们从第一个primefaces操作findAndModify开始寻找对象并为其添加locking属性(为了防止另一个计算对象与它进行交互并等待结束,因为我们可能有许多并行计算 – 在这种情况下,其他人应该被推迟),然后我们计算特定属性的大小,并在此操作之后 – 我们将元数据添加到对象并删除locking。 但是,有时候,当我们有很多单个对象的计算(特别是当我们并行计算大量对象的时候),有些更新不会被执行。 计算过程中的_size元数据如下所示: { _lockedAt: SomeDate, _transactionId: 'abc' } 计算后应该是这样的: { somePropertySize: 123, anotherPropertySize: 1245, (…) _total: 131431523 // Some number // Notice that both _lockedAt and _transactionId should be missing } 这就是我们的更新stream程: return Promise.coroutine(function * () { yield object.findOneAndUpdate({ '_id': gemId, '_size._lockedAt': { $exists: false } }, { $set: […]

将Babel转换为asynchronous模块的方法转换为带有ES6映射的Bluebird

我们正在尝试在Babel使用Node.js 6.5.0,使async functions使用Bluebird代替原生V8 ES6承诺: 我们的package.json只包含以下Babel条目: "devDependencies": { "babel-cli": "^6.9.0", "babel-plugin-transform-async-to-module-method": "^6.8.0", "babel-plugin-transform-es2015-destructuring": "^6.9.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", } 和.babelrc : { "plugins": [ "transform-es2015-modules-commonjs", "transform-es2015-destructuring", [ "transform-async-to-module-method", { "module": "bluebird", "method": "coroutine" } ] ] } 但是,我们的async functions返回ES6映射在执行过程中导致以下错误: 一个价值[对象地图]被产生,不能被视为一个承诺 我们如何解决这个问题? 聚苯乙烯一切正常,当async functions转换为generators与transform-async-to-generator

蓝鸟 – 函数返回承诺对象,而不是实际的数据

在这段代码之后,我试图编写一个函数,循环search目录,查找目录,并从这些目录中读取xml文件名(我知道文件夹结构将始终保持不变)。 到目前为止,我的function正在按预期工作,但是当我尝试从函数返回时,我只是得到Promise对象。 我的代码: const Promise = require('bluebird'); const fs = Promise.promisifyAll(require('fs')); const path = require('path'); function getFileNames(rootPath) { // Read content of path return fs.readdirAsync(rootPath) // For every file in path .then(function(directories) { // Filter out the directories return directories.filter(function(file) { return fs.statSync(path.join(rootPath, file)).isDirectory(); }); }) // For every directory .then(function(directories) { return directories.map(function(directory) { […]

蓝鸟,茉莉花和asynchronousfunction未处理的拒绝错误

考虑以下(人为的)例子: import Promise from 'bluebird'; const resolvedPromise = () => { return Promise.resolve('Test'); }; const asyncFunc = async (asyncResource) => { await resolvedPromise(); await asyncResource.fetchItem(); }; describe('async/await', () => { it('should throw an error', (done) => { const mockAsyncResource = jasmine.createSpyObj('mockAsyncResource', ['fetchItem']); const mockError = Promise.reject(new Error('HTTP 401 – Access Denied')); mockAsyncResource.fetchItem.and.returnValue(mockError); return asyncFunc(mockAsyncResource).catch(err => […]

蓝鸟promisifyAll与promisifying每种方法

我正在使用节点模块而不是使用PromisifyAll()我每次当我调用该模块的方法创build一个新的承诺对象。 这是一个安全的方式promisify? 如果没有,那么我的整个代码结构将会改变。 所以改变或者只要我使用Promise就很好。 如果我单独使用每种方法,是否对内存或CPU有影响?

Javascript – 不能解决这个'警告:承诺是在处理程序中创build的'

在nodejs应用程序中使用sequelize.js,我有一个promise.all,它承担了两个承诺( user查询和color查询): router.get(`/someEndPoint`, (req, res) => { let userAccount = user.findOne({ where: { id: //some ID } }); let colorStuff = color.findOne({ where: { colorName: //some color } }) Promise.all([userAccount , colorStuff ]).then(([result1, result2]) => { //do stuff, such as: res.send('success'); }).catch(err => { console.log(err) }); }); 在说//do stuff的部分,我的控制台一直给我这个警告: a promise was created in a […]

未经处理拒绝承诺

我试图使用蓝鸟的Promise.each()进行多个数据库查询。 我卡住的部分是我无法处理所有的拒绝(如果多个承诺失败)。 如果我使用Promise.all()做同样的事情,它会正常工作(因为在Promise.all()中,如果1 promise失败,结果也会被拒绝)。 我的问题是:我应该如何处理Promise.each()中的拒绝? function foo(bar){ return new Promise(resolve, reject){ var query = "elect count(*) from students Where 1=1";//DELIBRATE MISTAKE connection.query(query, function(err, result){ if(err){reject(err)}resolve(result); }) } } function api(req, res){ var tasks = []; for(var i = 0; i < 10; i++){ tasks.push(foo(bar)); } Promise.each(tasks).catch(err=>{return err;}); res.send('message') } 响应: Unhandled rejection Error: ER_PARSE_ERROR