Tag: asynchronous

unit testing事件驱动的JavaScript

我在用node.js编写一个服务器端应用程序,并希望包含unit testing。 我正在努力的一件事是unit testingEventEmitter和setInterval/setTimout的好方法 我有什么selectunit testingasynchronous服务器端JavaScript? 我知道我可以将另一个侦听器附加到作为testingfunction的EventEmitter,但是我怎样才能让testing函数运行? 部分unit testing是为了确保unit testing的每个部分都运行。 我可以自己使用setTimeout,但这似乎是一个黑客的解决scheme。 如果这有帮助,那么我试图testing一些exampler代码。 … function init(param) { … // run update entities periodically setInterval(this._updateEntities.bind(this, param.containerFull), 1000 / param.fps); … } … EntityUpdater.prototype = { … "_updateEntities": function updateEntitiesfunc(fn) { this._tickEmitter.emit( "tick", new dataContainer.DataContainer(this.getEntityCount()) .on( "full", fn.bind(this) ) ); }, … } … (发射会触发一个事件) [编辑] 我开始阅读一些EvevntEmittertestinghttps://github.com/ry/node/tree/master/test/simple ,这有助于我看到如何去做这件事。

Node + Sequelize:如何在添加之前检查项目是否存在? (asynchronous混淆)

不幸的是,对于节点的asynchronous/同步执行,我对节点很陌生。 我正在使用节点,与sqlite和async.js sequelize。 我有一系列的Articles ,每个Articles都有一些Authors 。 对于每篇Article每位Authors ,我想检查Author存在。 如果没有,创build它。 问题是,在最初运行时,重复作者正在创build,我认为由于asynchronousfunction导致检查存在的问题。 例如,用数组: authors = ['A. Test', 'B. Test', 'C. Test', 'A. Test'] authors = ['A. Test', 'B. Test', 'C. Test', 'A. Test'] 和代码: async.each(authors, function(item, callback){ Author.sync().then(function(){ Author.count({ where: {name: item.trim()} }).then(function(count){ if (count != 0) { console.log('Author already exists') } else { console.log('Creating author…') Author.create({ […]

当所有的任务完成后,async.parallel仍然会调用最后的callback函数,如果其中任何一个得到错误?

var async = require('async'); async.parallel([ function(cb) { cb(true); }, function(cb) { cb(null, true); }], function(error, results) { } ); 在代码中,如果第一个任务在第二个任务之前运行cb(true),第二个任务是否仍然运行? 如果是这样,完成后,主callback仍然会被调用?

asynchronous或同步bcrypt函数使用node.js为了生成哈希?

我目前正在尝试在node.js中为我的项目制作身份validation模块? 我已经看到了一些使用bcrypt生成哈希的例子 https://github.com/bnoguchi/mongoose-auth/blob/master/lib/modules/password/plugin.js https://github.com/Turbo87/locomotive-passport-boilerplate/blob/master/app/models /account.js 但是,由于某些原因,他们正在使用bcrypt.hashSync()函数。 由于bcrypt是很好的,因为它很费时,为了不阻止代码,使用asynchronous函数不是更明智吗,即: User.virtual('password') .get( function () { return this.hash; }) .set( function (password) { bcrypt.hash('password', 10, function(err, hash) { this.hash = hash; }); }); 你能解释一下我哪个更好,为什么? 谢谢!

Nodejs的callback机制 – 哪个线程处理callback?

我是nodeJS的新手,想知道Node的单实例模型。 在一个简单的nodeJs应用程序中,当某些阻塞操作与callbackasynchronous处理时,运行nodeJs的主线程是否也处理callback? 如果请求是从数据库中获取一些数据,并且有100个并发用户,并且每个db操作需要几秒钟,当最后触发(对于每个连接)callback时,接受这些请求的主线程用于执行callback以及? 如果是这样,nodeJs如何扩展,它如何快速响应?

Node.js和Express:如何在asynchronous操作之后返回响应

我是Node.js的新手,所以我仍然围绕着asynchronous函数和callback。 我现在正在努力的是如何在asynchronous操作中读取文件中的数据之后返回响应。 我的理解是,发送回应是这样的(这对我有用): app.get('/search', function (req, res) { res.send("request received"); }); 但是,现在我想读取一个文件,对数据执行一些操作,然后返回结果作为响应。 如果我想对数据执行的操作很简单,我可以这样做 – 执行它们的内联,并保持对res对象的访问,因为它仍然在范围内。 app.get('/search', function (req, res) { fs.readFile("data.txt", function(err, data) { result = process(data.toString()); res.send(result); }); }); 但是,我需要执行的文件操作很长,也很复杂,我已经将它们分离到各自的函数中,并放在单独的文件中。 结果,我的代码看起来更像这样: app.get('/search', function (req, res) { searcher.do_search(res.query); // ??? Now what ??? }); 我需要调用res.send才能发送结果。 不过,我不能直接在上面的函数中调用它,因为do_searchasynchronous完成的。 而且我不能在callback到do_search调用它,因为res对象不在那里。 有人可以帮我理解在Node.js中处理这个问题的正确方法吗?

为什么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中使用的想法?

有条件地调用节点中的asynchronousfunction

我有下面的示例代码 – 第一部分可以导致asynchronous调用或不 – 应该继续。 我不能把其余的代码放在asynchronouscallback中,因为当条件为假时需要运行。 那么如何做到这一点? if(condition) { someAsyncRequest(function(error, result)) { //do something then continue } } //do this next whether condition is true or not 我认为把代码放在函数中可能是在上面的asynchronous调用中或者在其他调用中调用该函数的方式,如果条件是错误的 – 但是有没有其他方式不需要我打破它的function?

node.js:程序意外退出或挂起

我在node.js中写了一个模块来执行一些networking操作。 我写了一个使用这个模块的小脚本(下面的variablescheck )。 它看起来像这样: check(obj, function (err, results) { // … console.log("Check completed"); }); 现在这是有趣的事情。 当此代码作为mochatesting的一部分执行时,testing按预期退出。 我看到打印的日志语句,并退出进程。 当代码作为独立节点脚本执行时,会打印日志语句,但该过程只是挂起。 当我尝试debugging它,并使用–debug-brk启动程序并使用node-inspector ,它会提前退出! 我看到process.on 'exit'被调用。 它退出,而模块内的一些内部callback尚未被调用。 所以上面的日志语句也不会被打印。 我现在卡住了,不知道为什么发生这种情况。 有没有人看过类似的行为?

为什么不能stream行的JavaScript运行时处理同步的asynchronous脚本?

正如牛仔在这里的评论中所说的 ,我们都希望“用类似于这样的风格编写[非阻塞JavaScript]asynchronous代码: try { var foo = getSomething(); // async call that would normally block var bar = doSomething(foo); console.log(bar); } catch (error) { console.error(error); } “ 所以人们已经想出了解决这个问题的方法 callback库(例如asynchronous ) 许诺 事件模式 精简 域和 发电机 。 但是这些都不会像上面的同步代码那样简单易懂。 那么为什么JavaScript编译器/解释器不能阻止我们当前所知的“阻塞”语句呢? 那么,为什么JavaScript编译器/解释器不能处理上面的同步语法,如果我们把它写成asynchronous样式? 例如,在处理上面的getSomething() ,编译器/解释器可能只是说“这个语句是对[文件系统/networking资源/ …]的调用,所以我会记getSomething()听从那个调用的响应并在此同时继续我的事件循环“。 当调用返回时,执行可以继续执行doSomething() 。 您仍然会保留stream行的JavaScript运行时环境的所有基本function 单线程 事件循环 阻塞操作(I / O,networking,等待定时器)“asynchronous”处理 这只是对语法的一种调整,只要IT检测到一个asynchronous操作,解释器就可以暂停执行任何给定的代码,而不需要callback,代码只是在asynchronous调用后继续执行回报。 正如杰里米所说 JavaScript运行时没有任何事情会抢先暂停给定任务的执行,允许其他代码执行一段时间,然后恢复原来的任务 为什么不? (如在“为什么不能存在?”我对历史课不感兴趣) […]