Articles of 承诺

在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){ […]

在mysql查询之后承诺警告

我是新的nodejs。 我有这个代码: exports.index = function(req, res) { User.findAll({ attributes: [ '_id', 'name', 'email', 'role', 'provider' ] }) .then(function(users) { res.status(200).json(users); }) .catch(handleError(res)); }; function handleError(res, statusCode) { statusCode = statusCode || 500; return function(err) { res.status(statusCode).send(err); }; } 执行时我收到这个警告: 警告:一个承诺是在一个处理程序中创build的,但没有被返回 在[object Object] .Model.findAll(C:\ aii \ tema2-node \ node_modules \ sequelize \ lib \ model.js:1329:18) 你知道我为什么收到这个警告吗? […]

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 = […]

使用诺言等待数据库操作

我有一个函数调用另一个函数,它连接到数据库来获得一些价值。 在执行完成之前,我不能继续进行,因为该值将用于数据库上的另一个事务。 我正在使用yield来确定该方法的完成,并promise解决或拒绝响应。 这是我如何做到的: co(function*() { rec.x = yield getX(a, b); //use rec to update something else conn.update(rec); }).catch((err) => { console.error(err.stack) }); function getX(a, b) { return conn.getVal(a, b); } exports.getVal = function(a, b) { return sql.connect(connStr).then(function() { return new sql.Request() .input('a', sql.VarChar(100), a) .input('b', sql.VarChar(50), b) .execute('someProc').then(function(recordSet) { return Promise.resolve(recordSet[0][0]); }); }); }; […]

Angular没有从承诺的FS.readFile中获取数据

我正在尝试使用Angular服务来调用fs.readFile或fs.writeFile这取决于按下的button的types,以便了解节点和angular度许诺如何交互。 我所拥有的是读写文件,但是不会发回读取的数据,也不会为了解错误而抛出任何错误。 //HTML <button ng-click="rw('write')">WRITE FILE</button> <button ng-click="rw('read')">READ FILE</button> //angular angular.module('test', []) .controller('ctrl', function($scope, RWService){ $scope.rw = function(type){ RWService.rw(type) .then( function(res){ console.log('success'); }, function(err){ console.log('error'); }) }; }) .service('RWService',['$http', '$q', function($http, $q){ this.rw = function(type){ var promise = $http.get('./rw/' + type); var dfd = $q.defer(); promise.then( function(successResponse){ dfd.resolve(successResponse); }, function(errorResponse){ dfd.reject(errorResponse); } ); return dfd.promise; […]

使用蓝鸟.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} )?

如何回报所有的诺言

我在这个脚本中有4个阶段,我正在做,可以叫第一阶段,第二阶段第三阶段和第四阶段。 在每个阶段,我提供了一个文件数组,我使用map函数遍历每个文件,做一些东西,并返回我所需要的,如下所示: phaseOne: files = files.map((file) => { // do some stuff, and return. }); 而且我正在使用reduce来调用每个阶段: [ 'phaseOne', 'phaseTwo', 'phaseThree', 'phaseFour' ].reduce… call one, after call two, after call three. 问题开始时,我在第二阶段的asynchronous操作: phaseOne: files = files.map((file) => { return new Promise((resolve) => { //async, if ok resolve. }); }); 所以,当第三阶段被调用时,我需要使用Promise.all来等待数组中的每个项目: phaseThree: Promise.all(files).then((files) => { files = […]

快递链接承诺:在最后一步没有收到数据

我正在使用Mongoose的findOneAndUpdate方法来处理我的restful API的放置请求。 我把密码保存到第二步,使用“保存”Mongoose的前置钩子,并且我正在把前面的密码哈希。 router.put("/:id", function(req, res, next){ var password = req.body["password"]; delete req.body["password"]; var p = new Promise(function (resolve, reject){ User.findOneAndUpdate({_id:req.params.id}, req.body, { 'new': true } ,function (err, user) { if (err) { reject(err); } else { resolve(user); } }); }); p.then(function(user){ if(!password) { return user; } user.password = password; user.save(function(err) { if (err) { […]

链promise.all从以前的promise.all返回的数组

我正在编写我自己的博客平台。 我有一堆代码,执行以下操作: 从一堆文件夹中读取.md文件,其中每个文件夹都是顶级类别。 处理每个文件中的数据,从YAML前端和降格格式的文本中读取数据。 按datesorting,然后写一堆.json文件,如下所示: cache/posts.json cache/[category]/[category].json cache/[category]/[post-id].json , cache/[category]/[post-id].json ,..等等。 我有这个工作与厄运的callback三angular。 有人告诉我,我应该用承诺来做到这一点,然而,尽我所能,我不能让我的代码工作。 所以,我有: folders = ['notes','gallery','diary']; function getFilesInFolder(folder) { //returns a new Promise that contains an array of markdown files } function getFileContents(folder,file) { //returns a new Promise that contains the data from the file } function processPostData(data,folder,file) { //returns a new Promise that […]