Articles of 承诺

nodejs等待,直到所有的MongoDB调用循环完成

我正在逐行读取一个CSV文件的数据stream,并在每一行调用一个findOne MongoDB调用,在运行下一个函数之前,我怎么才能等到每行的所有mongo调用都完成? 我见过Promises能做到吗? 但是我发现Promises非常难以理解。 而且我发现的例子都没有包括我想要的。 :/ var validProducts = []; fs.createReadStream(req.file.path) .pipe(csvStream) .on('error', function (err) { console.error(err); }) // loop through all rows .on('data', function (data) { if (data.size === 'a3') { ProductModel.findOne({ sku: data.sku }, function (err, product) { if (product !== null) { product.size = data.size; product.save(); validProducts.push(product); } }); } }); // […]

承诺Js:等待承诺履行

我正在与Bluebird在Node.Js中做出承诺,并想知道如何在履行承诺(完成)时作出函数返回。我想要的行为是: function getItem(){ functionReturningPromise.then(function(result){ //do some operation on result return result; }); } 但是,上述实现不会返回任何东西,因为承诺在执行时没有完成。 什么是最好的解决方法呢? getItem的目的是修改任何functionReturningPromise返回,然后返回它

如何使用请求库和Bluebird发送发布请求?

所以inheritance人我的设置: var Promise = require("bluebird"); var request = Promise.promisify(require('request')); 这工作: request('url') 它返回一个承诺 这不: request.post('url', {form: {type: 'artist'}}) 给我这个错误: TypeError: Object function promisified(_arg0,_arg1) { … }has no method 'post' at /Users/beamer30/projects/wevo/controllers/music.js:85:30 at Array.map (native) at MusicSearch.spotifyRelated (/Users/beamer30/projects/wevo/controllers/music.js:84:22) at MusicSearch.findRelatedArtists (/Users/beamer30/projects/wevo/controllers/music.js:48:7) at musicController.search (/Users/beamer30/projects/wevo/controllers/music.js:100:17) at Layer.handle [as handle_request] (/Users/beamer30/projects/wevo/node_modules/express/lib/router/layer.js:76:5) at next (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:100:13) at Route.dispatch (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:81:3) at Layer.handle […]

如何unit testing一个函数调用另一个返回一个承诺?

我有一个使用快递4的node.js应用程序,这是我的控制器: var service = require('./category.service'); module.exports = { findAll: (request, response) => { service.findAll().then((categories) => { response.status(200).send(categories); }, (error) => { response.status(error.statusCode || 500).json(error); }); } }; 它呼吁我的服务返回一个承诺。 一切正常,但我试图unit testing时遇到了麻烦。 基本上,我想确保根据我的服务返回,我用正确的状态代码和正文刷新响应。 所以摩卡和sinon看起来像这样: it('Should call service to find all the categories', (done) => { // Arrange var expectedCategories = ['foo', 'bar']; var findAllStub = sandbox.stub(service, 'findAll'); […]

在Node.js 7中,抑制UnhandledPromiseRejectionWarning的正确方法是什么?

在Node.js中,我有一个由一个函数组成的模块。 函数返回promise,promise可能被拒绝。 我仍然不想强制模块的所有用户明确地处理拒绝。 通过devise在某些情况下,忽略返回的承诺是有意义的。 此外,我不想承担模块用户的承诺拒绝的能力。 什么是正确的做法呢? 升级到Node.js 7.1.0之后,我所有忽略拒绝处理的unit testing都显示如下警告: (node:12732) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: try to throw an error from unit test (node:12732) 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. 在DeprecationWarning描述中提到将来终止Node.js过程的正确方法是什么?

承诺 – 在Promise中捕获所有的拒绝。所有

我有这个虚拟代码 var Promise = require('bluebird') function rej1(){ return new Promise.reject(new Error('rej1')); } function rej2() { return new Promise.reject(new Error('rej2')); } function rej3() { return new Promise.reject(new Error('rej3')); } Promise.all([rej1(),rej2(),rej3()] ).then(function(){ console.log('haha') },function(e){ console.error(e); }) 在拒绝处理程序中,我只看到第一个拒绝。 是否有可能查看所有三个拒绝?

promise链里面的返回值没有被调用

我正在使用承诺库蓝鸟,我目前正在运行的问题,该函数内的一切运行良好,但当我尝试返回一个值,该函数返回undefined 。 这是承诺链: function foo() { createGroupMembers(parsedChat).then(function(val) { var members = val; createMessages(parsedChat, maxPages).then(function(val) { var messages = val; Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)]) .then(function (results) { var front = results[0]; var stats = results[1]; var backcover = results[2]; var book = head + front + stats + members + messages + backcover; […]

不会捕获从mongoose承诺的callback函数抛出的错误

我花了太多时间试图弄清楚为什么我的express.js控制器没有响应一个简单的查询,并且发现从一个Mongoose-promisecallback触发的运行时错误正在默默地中断callback过程。 这里是我的代码的简化版本: server.get('/api/test', function (req, res, next) { User.find({}).exec().then(function success(users){ console.log('SUCCESS'); typo[0] = 1; // throws a runtime error res.json(users); }, function error(err){ console.log('ERROR'); res.json({error: err}); }); }); 这导致SUCCESS在我的控制台显示,但没有任何反应。 没有给予用户的回应,我的错误造成的错误没有出现在我的控制台,错误callback也不会被调用。 我知道一个人不应该从callback函数中抛出exception,但是在这种情况下,这只是一个错字,而且当我这样做的时候,我会被警告(比如标准输出中的堆栈跟踪)的错误。 (毕竟我们是人类) 在你看来,当承诺callback中出现这种错误时,获得反馈的最佳方式是什么?

诺言。 resolve()和resolve()之间的区别是什么?

在某处阅读这个例子: return new Promise( (resolve, reject) => { fs.readFile(file, (err, data) => { if (err) reject(err) return resolve(data) }) }) 但我通常这样做: return new Promise( (resolve, reject) => { fs.readFile(file, (err, data) => { if (err) reject(err) resolve(data) }) }) 有没有区别?

在节点js失败后,重试自己承诺

我想重申我的要求。 我想启动我的刷新,如果我总是有401错误作为循环:(如果我有401循环刷新,直到200) 我试过这个: const request = require('request'); let conf = require('../conf'); let core_service = require('coreService'); let self = module.exports = { get_count_questions: function() { return new Promise((resolve, reject) => { request({ method: 'GET', uri: 'http://api/count-questions', auth: { 'bearer': conf.token }, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { […]