Tag: 承诺

一个没有返回数据的函数的承诺

我试图解开一大堆基于callback的节点代码,它看起来像承诺的关键,因为我有很多的asynchronous数据库操作。 具体来说,我正在使用蓝鸟。 我被困在如何处理一个函数,需要从数据库检索数据,并设置一定的值。 我试图完成的最终目标是这样的: myobj.init().then(function() { return myobj.doStuff1(); }).then(function() { return myobj.doStuff2(); }).catch(function(err) { console.log("Bad things happened!", err); }); 特别是init , doStuff1和doStuff2只有在前一个完成doStuff2需要运行,但是它们都执行(多个)asynchronous操作。 到目前为止,这是我对init的,但我不知道如何完成它: Thing.prototype.init = function(force) { if (!this.isInitialized || force) { return datbase.query("…").then(function(results){ // … use results to configure this }).catch(function(err){ console.log("Err 01"); throw err; }); } else { // ??? // No data […]

蓝鸟答应在快递/mongoose中过早返回

我是新的承诺,并想知道为什么以下不起作用。 我假设,因为我需要设置我的自定义方法与承诺工作的具体方式。 我使用蓝鸟作为我的诺言库。 我试图通过在这些模型(即讨论和用户模型)上使用mongoose静力学和方法来获得给定“用户”用户名的“讨论”对象的列表。 下面如果我的请求处理程序在Express中。 试图获取JSON并将其作为现在的响应发送: /* /routes/users.js */ var Promise = require('bluebird'); var User = require('../models/').User /* … express inclusions, other routes … */ /* Get list of discussions for user */ router.get('/:username/discussions', function(req, res) { User.findOne({username: req.params.username}).then(function(user) { if (user) { return user.getDiscussions(); } else { res.send('no user found'); } }).then(function(discussions) { res.send(discussions); […]

为什么在使用诺基亚时使用Q,蓝鸟框架?

在node.js学习承诺期间 我有一些疑问。 'promise'已经在node.js中定义了 但通常它似乎使用额外的承诺框架,如Q,蓝鸟,RSVP等 有什么理由吗? 核心node.js函数是不是可以用promise.denodeify函数来支持promise?

承诺如何在这种情况下实施?

我有一个同步使用fs.readfile的问题,他们不inenterizing第一次,如果我再次请求,然后我有结果。 我知道我可以使用承诺,我发现从Kriskowal Q有用。 我尝试过,但没有成功。 我不太清楚如何实现它。 如果有人可以帮助,我将永远感激。 码: "use strict" var Q = require('q'); var fs = require('fs'); var arrayZipBand = []; var jsonZipCode = []; var arrayParsedZipcodeBr = []; exports.parse = function(opts) { if (opts.zipBand.constructor != Array) { opts.zipBand = [opts.zipBand]; } if (opts.location.constructor != Array) { opts.location = [opts.location]; } if (opts.config === 0) […]

蓝鸟承诺 – 不正确的履行顺序?

在我的expressJS应用程序中,我正在尝试运行2asynchronous承诺函数使用thennable返回… connect2Redis(config.cache) .then(connect2db()) .then(function() { console.log("Accounting Server started successfully!"); }) }) .catch(function(e){ console.error("Failed to start Accounting server. Error: ", e); }) 两个fns的“connect2Redis”和“connect2db”实现如下: function connect2Redis(opts) { var connectingMsg = "Connecting to Redis Cache @" + config.cache.host + ":" +config.cache.port; process.stdout.write(connectingMsg); return new Promise(function(resolve, reject){ var redisClient = redis.createClient(opts); redisClient.on('ready', function(){ console.log(" [ " + "OK".green + […]

ES5,如何在循环中使用promise

说command_arr.length === 2 当我运行下面的函数device_execute_command 。 执行消息的顺序是 finish one command finish one command has latest state? has latest state? 我期望的是: finish one command has latest state? finish one command has latest state? 码 var device_execute_command = function(command_arr) { // This is the main loop var i = 0; for(i=0; i < command_arr.length; i++) { var command […]

Q.allSettled是否会失败?

我在unit testing中看到过一些函数返回一个函数调用的q.allSettled() promise的.fail并附有一个.fail 。 但是.then即使某些/所有的承诺被拒绝,所有的人都会打电话给他。 这是一个例子: function someFunctionToTest(){ var aRejectedDeferred = Q.defer(); var anotherRejectedDeferred = Q.defer(); var aResolvedDeferred = Q.defer(); aRejectedDeferred.reject(new Error("I'm aRejectedPromise")); anotherRejectedDeferred.reject(new Error("I'm anotherRejectedPromise")); aResolvedDeferred.resolve({awesome:"I'm aResolvedPromise"}); return Q.allSettled([aRejectedDeferred.promise,anotherRejectedDeferred.promise, aResolvedDeferred.promise]) } it('should never fail', function(done) { someFunctionToTest() .then(function (data) { should.equal(data[0].state,'rejected'); should.equal(data[1].state,'rejected'); should.equal(data[2].state,'fulfilled'); // throw(new Error('I will trigger fail!!!')); done(); }) .fail(function (err) { […]

如何将承诺join承诺链

我有func1函数返回一个promise。 在func2我已经开始承诺链。 我想在这里做的是,我想在旧诺言链中使用func1parsing消息,我想这个代码是不那么复杂。 joinfunc1的最好方法是在func2承诺链 var func1 = function(){ return new promise(function(resolve, reject){ //some operations here }); }; var func2 = function(){ promise.resolve(someFuncSync()) .then(function(){ //this is the old promise chain func1() .then(function(message,error){ return message; //i want use this return value in old promise chain }); console.log(message); //printing func1 returned message in old promise chain }) };

如何在NodeJs中手动更新多个Mongo文档?

我有一个在MongoDB中的users集合。 我需要为每个用户生成一个令牌并将其保存到数据库中: var crypto = require('crypto'); db.users.find({}).exec(function(users){ users.forEach(function(user){ user.token = crypto.randomBytes(32).toString('hex'); user.save(); }); }); 我总是对asynchronous方法感到困惑,只是无法理解它们是如何工作的…所以这段代码在save()调用完成之前就不存在了。 你将如何使它工作? 你将如何等待所有的save() call并打印Done! 控制台? 谢谢!

如何在then()中传递bluebirdcallback的参数?

我有一个回报的承诺。 在这一刻,我这样做: Something( … ) .then(()=>{console.log("Done.");}); 这会更实际: Something( … ) .then(console.log, "Done."); 例如, setTimeout工作原理是这样的: setTimeout(console.log, 1000, "Done."); 蓝鸟有任何方法吗? 我的目标是要有这个实际的select来减less承诺产生的已经很荒谬的代码量。