Tag: 承诺

在整个摩卡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首先完成,然后才能执行其余的代码?

Q承诺Nodejs如何在循环中解决

我有写在nodejs的代码让我混淆使用Q Promises theFunction() .then(function(data) { var deferred = Q.defer() var result = []; for(i=0; i < data.length; i++) { secondFunc(data.item) .then(function(data2) { data.more = data2.item }); result.push(data); } deferred.resolve(result); deferred.promise(); }); 我想第二个函数里面的数据循环可以推入结果 所以我以前的数据是这样的 [ { id: 1, item: 1, hero: 2 }, { id: 1, item: 1, hero: 2 } ] 像这样 [ { id: […]

为什么我不能在节点v0.11.11中使用Promise?

我只是搞乱了v0.11节点的分支,我想知道为什么我不能使用原生ES6 Promise对象,即使打开了–harmony也是如此。 我正常的浏览器: Google Chrome 32.0.1700.77 (Official Build 244503) JavaScript V8 3.22.24.10 支持他们,而node.js v0.11.11告诉我: > process.versions.v8 '3.22.24.19' 那么给了什么?

为什么NodeJS不使用Promise作为readFile API?

在书https://pragprog.com/book/tbajs/async-javascript中 ,我发现这个: Node的早期迭代在其非阻塞API中使用了Promises。 然而,2010年2月,Ryan Dahl做出了转向现在熟悉的callback(err,results …)格式的决定,理由是Promise是属于“用户区”的更高级别的构造。 这看起来很让人困惑,因为作为一个读取文件的API,这个 fs.readFile('/etc/passwd') .onSuccess(function(data){console.log(data)}) .onError(function(err){throw err}) 看起来比这更好: fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); }); 有没有人有关于为什么“承诺是一个更高级别的构造”会停止在NodeJS API中使用的想法?