Tag: 蓝鸟

拒绝承诺没有达到捕获

我试图使用这种方法非顺序诺言输出。 express .json调用成功地从API发送了一个201到用户对象,但是在控制台中,我得到如下所示的未处理拒绝错误。 这似乎应该被控制器中的.catch处理程序捕获。 我想知道为什么会发生这种情况? UserController的 module.exports.postUser = function (req, res, next) { var user = req.body.user; var ip = req.ip; userService.createUser(user, ip) .then(function (user) { res.status(201).json({"user": user.toJSON()}); }) .catch(function (err) { return next(err); }); }; userService module.exports.createUser = function (user, ip) { var user = new Promise(function (resolve, reject) { return resolve(User.forge(user)); }); return […]

蓝鸟承诺的functionarrays

我有一个需要从JSON文件中读取的函数数组: "functionArray" : ["task1()", "task2()", … , "taskN()"] 我的要求是顺序调用这些任务,以便只有在task1函数成功执行后调用task2函数。 将使用这些函数的包装将具有函数定义。 function task1(){ console.log('Inside task1'); } function task2(){ console.log('Inside task2'); } var functionArrayToBeUsed = readFromJson(functionArray); \\functionArrayToBeUsed has all tasks that need to be finished 什么将是一个理想的方式来做到这一点使用承诺。

如何在承诺之前添加附加逻辑

我使用下面的代码,它工作正常,现在我需要添加到它之前的readFileAsync查询Dir的另一个方法,我的问题是如何做到这一点? 这是目前正在工作的代码 var filePath = path.join(__dirname, '../userpath'); return fs.readFileAsync(filePath, 'utf8') .then(pars.getEx.bind(null, 'user')) .then(process.bind(null, 'exec')) .then(function (result) { return result.stdout; }, function (error) { return error; }); 现在我需要添加一些过程之前是这样的:现在应该返回的pathreadfileAsync(-relFilePath)我应该怎么做 var filePath = path.join(__dirname, '../../../../employess'); fs.readdir(filePath, function (err, files) { files.forEach(function (file) { if (file.indexOf('emp1') === 0) { // this should be returned var relFilePath = filePath + […]

蓝鸟模式嘲笑与syncronous代码的asynchronous承诺

我刚刚开始使用蓝鸟(和更一般的节点)。 我想创build一些模拟(最终会是http或数据库调用)。 所有关于反模式的讨论让我着急:-) 那么这是一个合理的方法将这个同步代码转换为承诺? 我在这里有两个简单的function。 第二个叫第一个(不是产品服务的方式),但它是嵌套承诺的例证。 // mock function to return a promise of a collection var getTestPatients = function(params) { return new Promise(function(resolve, reject) { setTimeout(function() {resolve(test_patients);}, 200); }) }; // mock function to return a promise of an object var getTestPatient = function(params) { return getTestPatients().then(function(patients) { // wouldnt get entire patient list […]

testing一个消费诺言的函数

我有一个平均的应用程序,我试图让testing工作在节点端。 asynchronous事件封装在控制器中使用的promise中。 我在testing控制器:( 我试图testing的控制器: ProjectController.prototype.getAll = function(req, res, next) { req.dic.subjectRepository .getById(req.params.subjectId) .then(function(subject) { res.json(subject.projects); }, function(err) { return res.status(404).send('Subject does not exist.' + err); }); }; subjectRepository是我们的数据源,它返回一个promise( mpromise因为我们正在使用mongoose ,但不应该): 所以在我们的testing中,我们试着嘲笑请求(我们正在从一个中间件注入我们的dependency injection容器到req )和响应(如果response.json()已经被我们试图获取的主题调用,testing成功)和我们的subjectRepository。 我们使用bluebird (虽然我尝试了其他人的挫折)为我们的subjectRepository创build假承诺: describe('SubjectController', function() { 'use strict'; var Promise = require('bluebird'); it('gets all existing subjects', function() { // ————————————- // subjectRepository Mock […]

在Node.JS中使用Bluebird Promise和2个asynchronous操作

我有一个场景,我需要从MySQL数据库中获取logging,并在rediscaching中更新,并closuresMySQL和Redis连接。 脚步: 打开MySQL连接 从成功的MySQL数据库中获取logging 从MySQL查询结果成功更新Rediscaching closuresMySQL数据库连接。 我正在尝试使用蓝鸟承诺,但没有得到适当的结果。 下面的代码中的问题是最初被调用,甚至在最后应该执行的processBreakingNewsData函数中。 请在我犯错的地方纠正我 以下是我的node.js代码 constants.js文件 var Promise = require('bluebird'); module.exports = { getRedisConnection: function () { return require("redis").createClient(6379, 'XXXX', { auth_pass: 'XXXX' }); }, getMySqlConnection: function () { var conObj = { host: "localhost", user: "root", password: "", database: "deccan" }; var connection = require("mysql").createConnection(conObj); return new Promise(function (resolve, […]

承诺与每个asynchronous调用

var TheMovieDb = require('themoviedb'); var moviedbClient = new TheMovieDb('*****'); var movieJson = require("./seedMovieDB/movieName.json"); var MovieEntry = require('./movie.model'); var movieApi = new TheMovieDb('1b3819c5f61aaef99edf4c47a5de46f4', 'en'); var P = require('bluebird'); var _ = require('underscore'); var moviedb = module.exports = { indexMovie : function indexMovie(){ MovieEntry.removeAsync({}) .then (function() { _.each(movieJson, function(val, key, cb){ movieApi.searchMovies(val.name).then (function(mDetails) { if(mDetails !== undefined){ […]

问题与蓝鸟和请求得到rest回应

我使用'请求'模块来请求以下代码的rest服务: var request = require('request'); request.get('http://localhost:8190/api/1.0/product/012345', { auth: { user: 'toto', pass: 'totopass'} }, function(error,response,body) { console.log(body); }); 它的工作:)但我必须确保该调用是同步的,所以我想使用一个承诺。 我写了下面的代码: var Promise = require('bluebird'); var request = Promise.promisifyAll(require('request')); request.getAsync('http://localhost:8190/api/1.0/product/012345', { auth: { user: 'toto', pass: 'totopass'} }).then(function(error,response,body) { console.log(body); }); 但它失败了,我看到“未定义”是控制台。

Promises和nodejs的具体例子(也没有解决scheme)

因此,我想通过尝试使用nodejs来实现一个常见用例,来了解有关Promises的更多信息(我任意select了Bluebird,尽pipe“简洁”文档): 我有一堆9000左右的URL在一个文件中,也有一些空行。 我想要: 过滤空行(url.length <= 0) 筛选出不再响应的请求(通过使用request模块的HEAD请求) MAP通过dns.resolve()获取IPv4地址 MAP使用IPv4地址和http://ipinfo.io/xx.xx.xx.xx/geo来获取地理数据(好的,是的,每天都有API限制,但是我们假设我可以) 将结果信息作为JSON对象数组写入新文件 当然,这是可以并行运行的,因此比按顺序运行要快得多 第一个filter很容易,因为它立即返回(这里使用蓝鸟): Promise.each(urls, function(value, index, length) { return value.length > 0; }).then( console.log(urls); ); 但是我怎样才能将asynchronous头请求的结果反馈给Promise呢? 这里是另一个更完整的例子,我打了一堵墙(见内联评论): <pre class="prettyprint lang-js"> var Promise = require('bluebird'), request = Promise.promisifyAll(require('request')); var urls = ["", "https://google.com/", "http://www.nonexistent.url"]; var checkLength = function(url) { return Promise.resolve(url.length > 0); } var checkHead = […]

使用蓝鸟.return()方法扩展蓝鸟诺言解决的价值

我试图通过使用蓝鸟的.return()方法来扩展承诺解决的价值。 目前我使用下面的代码: doSomethingAsync() // assume resolved value is {a: 0} .return({b: 1}) .then(console.log); // prints {b: 1} 我想扩展result对象({b:1})与doSomethingAsyncparsing的值,在这种情况下{a: 0} ,所以我可以写这样的: var extend = require('extend'); doSomethingAsync() // assume resolved value is {a: 0} .return(extend(resolvedValue , {b: 1})) .then(console.log); // should print {a: 0, b: 1} 是否可以从.return()参数中访问doSomethingAsync()parsing的值(在这种情况下为{a: 0} )?