Tag: promise

将一组q个promise发送到数据包中,并连续运行这些数据包

我的目标是复制文件并将并行复制的文件限制为一个已定义的variables。 因此,我将fs.copy调用拆分成了一组数据包,并使用reduce函数串行运行这些数据包。 var promise = _.reduce(packets, function (previous, packet) { var map = _.map(packet, function (file) { return q.nfcall(fs.copy, file.source, file.target); }); return previous.then(q.all.bind(null, map)); }, q()); 如何用q实现我的目标?

Node.js Q承诺forEach返回undefined

对Node.js使用Q,我承诺一个HTTP请求,并且在履行时调用另一个传入该HTTP请求响应的函数,然后该函数从HTTP请求迭代JSON数组,然后返回一个新的数组并返回它。 debuggingReddit.prototype.parseData我可以看到HTTP JSON传入,并在for语句我可以console.log data因为它已经build成,但在foreach结束我不能console.log,或返回数据对象,它返回undefined Reddit.js var Reddit = function(){ this.endpoint = "https://www.reddit.com/r/programming/hot.json?limit=10"; } Reddit.prototype.parseData = function(json, q){ var dataLength = json.data.children.length, data = []; for(var i = 0; i <= dataLength; i++){ var post = {}; post.url = json.data.children[i].data.url; post.title = json.data.children[i].data.title; post.score = json.data.children[i].data.score; console.log(data); //returns data data.push(post); } console.log(data); // returns undefined return […]

如果承诺失败,在nodejs中重做任务,直到达到maxLimit

我有NetowrkIO和networking在这种情况下不可靠的function,所以这里它可能无法在第一次尝试,所以我需要重试,如​​果失败这里是伪代码 count = 0 maxLimit = 10 success = false while ( (success == false) && (count < maxLimit)) { try { doNetworkIO(arg) success = true } catch(ex) { count += 1 } } if( success == true ) { reportSuccess() } else { reportFailure() } 现在我试图在nodejs中做到这一点。 我search,并提出了承诺作为一种方式。 但是我不知道如何去做。 这是我的代码。 var count = 0 var […]

在javascript中返回一系列函数之后

我曾试图用q和async来做到这一点,但似乎无法使其工作。 试过后,我尝试了我自己的方式。 我不认为这会起作用,但我想我会试一试。 我感到困惑,因为在某种意义上,callback中存在callback。 这是我想要做的function: var getPrice = function(theData) { var wep = theData.weapon; var completed = 0; for (i = 0; i < theData.skins.length; i++) { var currSkin = theData.skins[i]; theData.skinData[currSkin] = {}; for (k = 0; k < wears.length; k++) { csgomarket.getSinglePrice(wep, currSkin, wears[k], false, function(err, data) { completed++; if (!err) { theData.skinData[data.skin][data.wear] […]

在承诺之外返回一个承诺variables

我需要从承诺之外得到一个variables的价值,但是我不能因为这个范围的原因。 在我的情况下,我使用Sequelize将数据保存到SQL数据库,但我想做类和dataToReturn我收到第二次save后的承诺 .post('/', (req, res) => { const event = new Event(Events, Data, req.body) event.save() res.status(201).json("HERE I NEED THE 'dataToReturn' from the promise") }) 这是我的课堂活动 class Event { constructor(Events, Data, Event) { this._Data = Data, this._Events = Events this._Event = Event } save() { this._Data.build(this._Event.Data).save().then((res) => this._Events.build({ name: this._Event.name, date: this._Evento.fecha, photo1: this._Event.photo1, photo2: this._Event.photo2, […]

如何使用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 […]