Articles of 承诺

如何通过node.js中的本地promise来全局处理exception?

我知道如何处理承诺中的具体错误,但我有时看起来像这样的代码块: somePromise.then(function(response){ otherAPI(JSON.parse(response)); }); 有时,当JSON.parse throw s时,我得到无效的JSON,导致无声的失败。 一般来说,我必须记得在我的代码中添加一个.catch处理程序给每个单独的承诺,当我不知道我在哪里忘记了。 我如何在代码中find这些被抑制的错误?

使用Bluebird.js和Twitterstream承诺和stream

我对Promise和Node是一个新超级新手,对于使用承诺和stream感到好奇。 我可以promisifystream? 使用Bluebirdjs和Twit模块我有以下几点: var Twit = require('twit') var Promise = require("bluebird"); var T = new Twit({ consumer_key: process.env.CONSUMER_KEY, consumer_secret: process.env.CONSUMER_SECRET, access_token: process.env.ACCESS_TOKEN, access_token_secret: process.env.ACCESS_TOKEN_SECRET }) Promise.promisifyAll(Twit); Promise.promisifyAll(T); var sanFrancisco = [ '-122.75', '36.8', '-121.75', '37.8' ] T.streamAsync('statuses/filter', { locations: sanFrancisco }) .then(function(connection){ connection.onAsync('tweet') .then(function (tweet) { console.log(tweet) }) }); 运行此代码不会logging推文,也不会引发错误。 没有任何事情发生,似乎有什么联系,但没有任何的承诺工作。 原始片段,在尝试实施在twit文件中发现的承诺之前 var sanFrancisco = […]

Promise和nodejs MongoDB驱动程序

我想向MongoDB驱动程序作出承诺。 我写了下面的代码: var TaskBroker = function () { this.queueName = 'task_queue'; this.rabbit = {}; this.mongo = {}; }; TaskBroker.prototype.connectRabbit = function() { var self = this; return amqp.connect('amqp://localhost') .then(function(connection) { self.rabbit.connection = connection; return connection.createChannel() }) .then(function(channel) { self.rabbit.channel = channel; return channel.assertQueue(self.queueName, {durable: true}); }) }; TaskBroker.prototype.connectMongo = function() { console.log('Connect Mongo'); var self […]

在整个摩卡testing之前运行asynchronous代码

我正在寻找一种方法来在整个摩卡testing之前运行asynchronous代码。 下面是一个testing的例子,它使用了一系列参数和期望值,并循环了这个数组中的所有项来产生函数断言。 var assert = require('assert') /* global describe, it*/ var fn = function (value) { return value + ' ' + 'pancake' } var tests = [ { 'arg': 'kitty', 'expect': 'kitty pancake' }, { 'arg': 'doggy', 'expect': 'doggy pancake' }, ] describe('example', function () { tests.forEach(function (test) { it('should return ' + test.expect, […]

快速error handling和asynchronous等待

在我的Node.js应用程序中,我添加了下面的代码来捕获每个未捕获的exception: process.on('uncaughtException', function (err: Error) { try { logger.err(err); } catch (err) { } }); 问题是Express有它自己的默认error handling程序,它捕获每个未捕获的exception。 现在,Express在Node(process.on)之前捕获了exception,所以我的logging器没有达到。 但是,可以添加另一个error handling程序,可以在执行Express之前捕获每个exception: app.use(logErrors); function logErrors (err: Error, req: Request, res: Response, next: NextFunction) { logger.err(err); next(err); } 这仍然不包括每一个案件。 每当我有一个async function ,我打电话await ,没有例外,但被拒绝的承诺退还。 例如: app.get('/foo', async function (req: Request, res: Response, next: NextFunction) { await bar(); }); function […]

如何打破承诺内的循环?

我正在做一个使用蓝鸟库的QA(问题/答案)应用程序。 所以这里的情况是: 用户用一些问题的答案填写表格(例如5个问题)。 一个问题有超过1个可能的答案:“问题有很多答案” 答案在数据库上使用node.bcryptencryption(bcrypt) 循环播放答案时,如果用户答案匹配,则不需要继续检查该问题的答案。 所以在做同步的时候,解决这个问题是一个普遍的问题,但是我有点失落,要做与承诺的asynchronous。 以下是我不知道如何进行的一个示例: .then(function(answers) { var compare = Promise.promisify(bcrypt.compare); // foreach answer, I need to check like this // compare(answer.password, user.password).then(function(match){ // if (match) break; <– something like this // }) })

结束一个承诺链

我遇到了一个关于一个未终止的Promise链的承诺警告('一个承诺是在一个处理程序中创build的,但没有从它返回')。 我对Promises很陌生,怀疑我不应该使用非事件驱动的思维。 但我不知道如何进行。 这全部在一个nodejs项目中。 我正在与ZWave服务器进行交互以打开和closures灯光。 这种交互采取向控制ZWavenetworking的服务器发出http请求的forms。 我使用Promise是因为通过http进行交互的asynchronous特性。 在我的程序的一个层次上,我定义了下面的类方法: ZWave.prototype.onOff = function (nodeNumber, turnOn) { var self = this; var level = turnOn ? 255 : 0; return new Promise(function (resolve, reject) { self.requestAsync(sprintf('/Run/devices[%d].instances[0].commandClasses[0x20].Set(%d)', nodeNumber, level)) .then(function (value) { resolve(value == 'null'); }) .catch(function (error) { reject(error); }); }); }; requestAsync类方法是实际处理与ZWave服务器交互的方法。 从概念上讲,在onOff()我试图打开一个特定的光,确定this.nodeNumber,或者打开或closures,然后返回该请求的结果。 onOff()被从一个Switch类的方法中调用,代表一个特定的灯光,如下所示: this.onOff = function( […]

蓝鸟承诺 – 然后终于

我在Bluebird / Promises中遇到了一些问题。 对于Promise1,一切正常,如果调用fullfill或拒绝。 但是,当我们在finally块中返回Promise2时,它只能用于拒绝,而对于fullfil,我们在callback中得到undefined。 function getPromise1() { return new Promise(function(fulfill, reject) { fulfill("OK1"); }); } function getPromise2() { return new Promise(function(fulfill, reject) { fulfill("OK2"); }); } getPromise1() .then(function(c){ console.log(c); }) .catch(function(e) { console.log(e); }) .finally(function() { return getPromise2(); }) .then(function(c){ console.log(c); }) .catch(function(e) { console.log(e); }); 输出: OK1 未定义

当我们在node.js中使用promise时,是否需要process.exit(1)

在我们公司,我们正在讨论一些关于在node.js中使用promise的时候是否需要退出一个进程的问题 我脑海中有两个思想stream派 当我们在node.js中使用promise时,我们需要使用process.exit(1) 当我们使用promise时,我们不需要使用process.exit(1) 顺便说一下,我们正在计划使用blubird模块来承诺。 https://www.npmjs.org/package/bluebird 我想知道是否有必要退出处理exception的事件,如使用承诺,我们得到“finally”语句来清理资源 http://canop.org/blog/?p=516 还有什么types的错误,我们可以期望,当谈到node.js承诺可能无法自行处理,如果有的话,我们可能需要处理 process.on("uncaughtException") { process.exit(1); }

socket.io – socket.on等待承诺

我有一个button,与服务器进行一些通信,以检查input的值(通过input框)是否已经存在。 代码如下: $("#button").click(function () { var exists = false; var name = $("#name").val(); socket.emit("check", name); socket.on("checkReturn", function (data) { exists = data.result; }); if (exists) { console.log("exists") } else { if (name.length > 0) { socket.emit("create", name); } } }); }); 问题是checkReturn调用是asynchronous的,因此代码继续执行而没有实际等待结果。 我如何确保checkReturn首先完成,然后才能执行其余的代码?