Tag: asynchronous

在Node.js同步/asynchronous性能和速度移动100.000 +文件

我试图找出最快的方式,而不影响性能很多同时或asynchronous移动100.000 +文件使用Node.js 我做了同步和asynchronoustesting与3个不同的循环forEach async.each和for 。 循环迭代不会影响定时结果。 影响性能和速度的最重逻辑是同步或asynchronous移动文件。 testing用例显示,同步renameSync()比20%慢,然后asynchronousrename() 。 同时asynchronousrename()使用3倍以上的CPU能力,然后同步renameSync() 。 我是否正确地认为使用同步renameSync()会更明智一些,因为asynchronousrename()速度提升并不那么重要,并且等于20%。 虽然asynchronous版本的CPU使用率开销似乎很大 – 300%? 还是我错过了什么? 也许在速度/性能方面有更好的解决方法。 时间: eachAsyncRenameAsync() node rename.js 1.60s user 11.20s system 280% cpu 4.559 total node rename.js 1.65s user 11.82s system 284% cpu 4.732 total node rename.js 1.64s user 11.84s system 292% cpu 4.606 total eachSyncRenameSync() node rename.js 0.69s user 5.01s […]

尝试了解更多关于Javascript -Node.jsasynchronous调用堆栈

如果我有以下代码: var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/:name', function(req, res, next) { let name = req.params.name; setTimeout(()=>{ res.render('index', { title: name }); },18000); }); module.exports = router; 我打开浏览器并尝试在同一时间以多个不同的名称参数值请求此API,例如: localhost:3000 / param1,localhost:3000 / param2,localhost:3000 / param3 基于JavaScript调用堆栈的概念,为什么在setTimeOutcallback中的req.params.name每次请求都会得到相同的req.params.name值。 请检查截图。

这是用Neo4j编写多语句事务的正确方法吗?

我很难解释Neo4j关于事务的文档。 他们的文档似乎表明喜欢这样做,而不是显式声明tx.commit()和tx.rollback() 。 这看起来是多语句交易和neo4j-driver最佳实践吗? const register = async (container, user) => { const session = driver.session() const timestamp = Date.now() const saltRounds = 10 const pwd = await utils.bcrypt.hash(user.password, saltRounds) try { //Start registration transaction const registerUser = session.writeTransaction(async (transaction) => { const initialCommit = await transaction .run(` CREATE (p:Person { email: '${user.email}', tel: '${user.tel}', […]

这个代码是如何同步的?

function foo(cb) { if (!someAuditCondition) { return cb(new Error(…)); // <- This is NOT asynchronous, but the rest of the function is! } doSomeAsynAction(function (err, data) { if (err) { return cb(err); } cb(data); }); } 那部分是如何同步的? 以及如何在process.nextTick()中处理该cb将使其asynchronous。

如何跟踪node.js中的asynchronous/等待错误?

假设你有一些相当复杂的node.js服务 ,有一天你会在它的日志中看到类似的东西: Error: getaddrinfo ENOTFOUND not-existing-host.com not-existing-host.com:80 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26) 注意 – 没有堆栈跟踪 。 如果您的服务中有大量的地方在进行http调用,您将如何find产生位置错误的地方? 有什么解决scheme可以保持堆栈跟踪(我不关心性能的含义,干净的堆栈跟踪方式更重要)? 看起来像require('longjohn')可以帮助,但它不是很可靠的工作,有时不打印堆栈跟踪(不能创build一个示例来演示)有没有其他解决scheme? 代码示例会产生这样的错误。 我用http作为例子,但是对于任何asynchronous函数都是如此。 const request = require('request'); // Let's say we write some helper function that wraps "request.js" async function get(url) { return new Promise((resolve, reject) => { request(url, function (error, response, body) { […]

在另一个NodeJS进程中执行一个JS文件(包含日志等)

这是我的问题,我想创build一个自动运行testing的CLI。 没有CLI,我可以使用node命令完美运行一切: node test.js 基本上,我想和之前的命令完全一样,所以我search了一个这样的技术。 我find了这个: #!/usr/bin/env node 'use strict'; const options = process.argv; const { execFile } = require('child_process'); const child = execFile('node', ['../dist/test.js'], (error, stdout, stderr) => { if (error) { throw error; } console.log(stdout); }); 这个方法对我不起作用,因为在test.js文件中,我使用的是ora包。 而且因为这个软件包正在制作实时animation,所以不会出现在stdout 。 有没有任何方式实时执行(没有子test.js )我的test.js使用节点? 我对其他方法是开放的,但是我想在NPM上发布CLI,所以请记住它必须在JavaScript中。 你可以在GitHub上find我所说的每个文件。 通常情况下,你不需要这个链接,但是如果你需要仔细观察,我会把它给你。

从csv文件加载数据时asynchronous节点/mongoose问题

我是Node新手,一般的asynchronous编程,我无法绕开这个问题。 我使用Mongoose将注册选民的数据导入到MongoDB中。 你可以想象,许多选民住在同一条街上。 在我的导入过程中,我检查一下街是否已经存在。 如果没有,我需要创build一个新的街道文件。 如果是这样,我只是想创build一个地址子文档。 我遇到的问题是我不知道如何处理find()Mongoose命令是asynchronous的。 所以在我的代码中发生的事情是,当CSV行被parsing时,所有的find命令都被排队,但是不会立即执行。 我的程序读取一行,例如看到一个“Choctaw St”的logging,并排队find()命令以查看它是否存在。 但下一行也可能是Choctaw St,另一个find()命令将排队。 在Mongo中创build文档发生在find()命令的callback中,在执行完所有的find命令之后,find()命令可能无法运行。 因此,当发现一个接一个地运行时,程序将尝试多次创build文档 这里是我的代码片段: Street.findOne( { campaign_id: user_id, street_name: streetData.street_name, city: streetData.city }, function(err, foundStreet) { if(err) { console.log(err) } if(foundStreet) { console.log('Found street: ' + foundStreet.street_name + '. Not adding!!!') //Code for address insertion will go here. } else { console.log(streetData.street_name + ' […]

自动尝试捕捉与asynchronous等待的路由器控制器

路由器: router.get('/available', VehicleController.getAvailable) router.put('/:vin/current-location', validate(vehicleValidation.currentLocation), VehicleController.saveCurrentLocation) 调节器 class VehicleController { async getAvailable (req, res, next) { try { res.json(await VehicleQueries.getAvailable()) } catch (e) { next(e) } } async saveCurrentLocation (req, res, next) { try { res.json(await VehicleQueries.updateLocation(req.params.vin, req.body.lng, req.body.lat)) } catch (e) { next(e) } }… etc etc 以上是使用新的asynchronous和等待在nodejs中构build的简单Crud应用程序。 每条路线validationinput然后传递到控制器。 上面的例子调用另一个类中包含查询的方法,这些查询又返回一个promise。 正如你所看到的,我必须包装每个控制器的代码在一个尝试和赶上..这是相当恼人的,我认为必须有一个更清洁的方式。 有没有可能以某种方式包装控制器方法本身在try catch? 这样我可以简化控制器: […]

在JavaScript中使用嵌套等待

我正在使用mongoose在Nodejs应用程序中使用MongoDB 内存和MongoDB数据库实现caching。 这里Nodejs 8.9与asynchronous/等待支持一起使用。 let get_func = async(userId) => { let is_cached = await cache_user.findOne({ user_id: userId }); if(!is_cached){ console.log("NOT CACHIED"); let is_dbuser = await db_user.find({}); console.log(is_dbuser); } else { console.log("CACHED"); } console.log("LEAVING get_func") }; get_func(100); 这里是输出: NOT CACHIED [] LEAVING get_func 但是, db_user充满了数据,并能够使用以下方式进行validation: db_user.find({}, function(err, users) { if (err) throw err; console.log(users); }); 而且用let […]

mongooseasynchronous请求pipe理

我实际上是试图将mongodb引用转换为这些引用的文档值(info.value)在JavaScript中使用mongoose。 试图通过使用地图,for / forEach,没有做任何工作,因为mongoose的请求是asynchronous的。 不是真的习惯了这种代码,在我尝试过的所有事情之后,我感觉有点失落。 也许有人想看看下面的代码给我一个暗示。 只是为了提供信息,不需要担心加载模板,连接到mongo,因为一切正常工作。 这是最接近预期的结果,但仍然,当我尝试“ console.log(cond [c]); / console.log(信息); ”(cond [c]和信息为空和未定义) 那么这个函数也需要做好recursion的准备,因为我打算把子块放到块对象的“内容”属性中。 非常感谢你的时间。 // Input condition "H1Vf3KTef || false" // Expected result "1 || false" // Buggy Function var execIfBlock = function recursExec (query, callback) { IfBlockModel.findOne(query, function(err, ifBlock) { if (!err) { var cond = ifBlock.condition.split(" "); //console.log('Block : ' + […]