Articles of promise

如何使用promise来模拟同步循环

我无法让诺言工作(我认为他们应该这样做)。 以下代码几乎立即执行。 即。 在将每个号码logging到控制台之前不等待4秒钟。 function do_nothing(a) { return new Promise(function(accept, reject){ console.log(a) setTimeout(accept(parseInt(a)+1), 4000); }); } function do_til_finish(i) { if (parseInt(i) < 5) { do_nothing(i) .then(j => do_til_finish(j)) .catch(j =>{}) } else { console.log('All done'); } } do_til_finish(0); 的jsfiddle 我错过了什么? 顺便说一句。 我不想asynchronous运行循环,因为语句将使用所有内存并冻结服务器。 这不是一个networking服务器,所以我不需要担心令人沮丧的用户。 提前致谢

当使用Promise.all时,Node_Redis HGETparsing为布尔数组

我一直在深入研究redis,并且使用redis进行工作,因为它只是数据存储(我知道这不是redis的预期目的,但是我从学习命令和整体使用Node上的redis获益) m使用Node_Redis。 这是我想完成的(所有在redis中):我尝试使用他们的电子邮件检索用户。 问题在于:我有一个Promise.all调用,它接收所有的电子邮件(键)并映射到HGET命令。 当Promise.all解决我期望它用一个用户对象数组解决,但它最终解决了一个布尔值数组(即[true,true,true])。 这是/users的逻辑 router.get("/", (req, res) => { client.lrange("emails", 0, 1, (err, reply) => { if (err) return console.log(err); if (reply) { Promise.all( reply.map(email => { return client.hgetall(email, (err, reply) => { if (err) return console.log(err); console.log("reply for hgetall", reply); // this prints a user object correct, but Promise.all still resolves to […]

Node.js Mongoose Promise迷路了

我有一个mongoDB的Node.js API。 有一个创build用户的路由,需要散列密码,为此我使用bcryptjs包。 路线如下所示: router.route('/user') .post(function(req, res) { if(req.body.password === req.body.passwordConfirm) { userManager.addUser(req.body) .then(function(response) { // waiting for the result of the mongoDB save res.send({data:response}); }); } else { res.send({err:'passwords do not match'}); } }) 和userManager.addUSer: this.addUser = function(userobject) { bcrypt.genSalt(10, function(err, salt) { // generate a salt if(err !== null) { console.log(err); } else […]

如何在使用node.js Q链执行期间插入promise?

我有一个承诺链,请求一个RSS URL,parsing它的链接,然后需要请求每个链接。 第一部分很好。 然而,我有问题的工作如何“插入承诺”,要求每个链接已被parsing。 我开始通过生成一个简单的链接url(首选的方法),但无法做到这一点。 代码现在生成一个promise数组请求每个URL,但我不知道如何使这个工作。 也许我需要使用Q.all(),但似乎是预定义的function? requestRss(rssSourceUrl) .then(function(links) { // ??? }) .catch(function(error) { console.log(error); }) .done(); function requestRss(url) { var deferred = q.defer(); request(url, function(err, resp, body) { if (err || resp.statusCode !== 200) { deferred.reject(new Error(resp.statusCode + ' ' + err + ' ' + body)); } else { $ = cheerio.load(body); […]

Q promises – 数组中每个元素的Node.js函数

函数dirList()应该返回definded目录内的文件夹数组。 我不明白如何返回dirListvariables只有在函数isDir()执行每个文件。 我想我应该使用Q.all() ,但我不知道我应该把它放在:-( var fs = require('fs'), Q = require('q'), readdir = Q.denodeify(fs.readdir); function isDir(path) { return Q.nfcall(fs.stat, __dirname + path) .then(function (stats) { if (stats.isDirectory()) { return true; } else { return false; } }); } function dirList(path) { return readdir(__dirname + path).then(function (files) { var dirList = files.filter(function (file) { return isDir(path […]

我怎样才能用“Q`与mongoose绑定`save`方法

说我在User.js有以下模式 var mongoose = require('mongoose'); var Q = require('q'); var userSchema = new mongoose.Schema({ phone: { type: Number, require: true, index: { unique: true } } }); module.exports = mongoose.model('User', userSchema); module.exports.findOne = Q.nfbind(module.exports.findOne.bind(module.exports)); module.exports.find = Q.nfbind(module.exports.find.bind(module.exports)); 另一个文件testuser.js var mongoose = require('mongoose'); var Q = require('q'); var User = require('../User'); var connectionStr = "mongodb://localhost:27017/user-model-test"; mongoose.connect(connectionStr, […]

节点js不解决承诺的数组

我试图执行几个asynchronous请求,并试图使用承诺获得输出。 如果我有多个请求排队Q.all(promises).then()函数似乎不工作。 对于单个请求,承诺全部解决。 示例代码在这里。 var request = require('request'); var Q = require('q'); var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com']; // var sites = ['http://www.google.com'] var promises = []; for (site in sites) { var deferred = Q.defer(); promises.push(deferred.promise); options = {url: sites[site]}; request(options, function (error, msg, body) { if (error) { deferred.reject(); } deferred.resolve(); }); } […]

一旦CSV完成阅读,如何解决承诺?

我正在使用这里find的'fast-csv'模块( https://www.npmjs.org/package/fast-csv ),但是我愿意改变它。 我试过promised-csv( https://www.npmjs.org/package/promised-csv ),但是我无法把头绕在里面。 我也使用q( https://www.npmjs.org/package/q )。 这是一个长期承诺的function链的一部分,所以我只会打扰你这个和那个之后立即。 var csvRows = []; var parseCSV = function(){ var d = q.defer(); csv .fromPath(school+'_export1.csv') .on('data', function(data){ csvRows.push(data); }) .on('end', function(){ done = true; d.resolve(); }); return d.promise; } var updateSchedule = function(){ var d = q.defer(); console.log(csvRows); // csvRows.forEach(function(row){ // console.log(row); // connection.query('INSERT INTO schedule […]

我如何将Q promise与MongoDB cursor.each()一起使用?

我的代码的要点如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); return winCount/totalCount; } 这里显而易见的问题是,在return语句中,winCount和totalCount仍然等于0.我正在尝试使用Q promise库来整理一系列事件,但我不确定如何实现它。 有人可以告诉我怎么处理Q? 编辑 ID:10T错误在这里。 我忘了我正在使用和尚包装。 对于那些想知道我做了什么来解决这个问题的人,僧侣有一个很好的方式来处理承诺,方法如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; var promise = db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); promise.success(function(){ return winCount/totalCount); […]

Javascript和承诺与Q – 封闭的承诺问题

我使用Node.js和Q编写服务器端的asynchronous代码。 我对诺言是新的(对于asynchronous编程我一般都是新手),而且我遇到了一些麻烦,我不能通过查看Q文档来解决这个问题。 这里是我的代码(这是coffeescript – 让我知道,如果你想看到的JavaScript): templates = {} promises = [] for type in ['html', 'text'] promises.push Q.nfcall(fs.readFile , "./email_templates/#{type}.ejs" , 'utf8' ).then (data)-> # the problem is right here – by the time # this function is called, we are done # iterating through the loop, and the value # of type is incorrect […]