Tag: asynchronous

哪些函数可以在node.js中同步工作?

例如,我正在写随机生成器与crypto.randomBytes(…)以及另一个asynchronous函数。 为了避免callback地狱,我虽然我可以使用crypto.randomBytes的同步function。 我的疑问是,如果我这样做,我的节点程序将停止每次执行代码? 然后,我想如果有一个asynchronous函数列表,它们的运行时间很短,这些函数可以作为同步函数,那么使用这个函数列表进行开发将非常容易。

如何使用Node.js和Express在JavaScript中使用GET请求更改页面?

在这个应用程序,用户有一个表,他们可以input数据。 每行有一个“编辑”button,当他们点击那个button时,我想把他们带到一个叫“/ update”的新页面,在那里他们可以修改那个行的值。 我现在已经这样做了,当他们点击更新button时,它会运行editRow函数,传递表的id和行中的数据。 但是,我无法弄清楚如何让路线正常工作。 我使用的是Node.js,Express,Handlebars,但没有使用 jQuery。 app.js (服务器端) app.get('/update', function(req,res){ var context = {}; context.tableID = req.ID; context.element = req.element; res.render('update', context); }); update.handlebars <h1>test for now</h1> main.handlebars <!doctype html> <html> <head> <title>Workout Tracker</title> <link rel="stylesheet" href="css/style.css"> <script src="scripts/buttons.js" type="text/javascript"></script> </head> <body> {{{body}}} </body> </html> buttons.js (客户端) function editRow(tableID, element) { var httpRequest; httpRequest […]

readline数据被推入后,数组为空

我正在尝试编写一个程序,我需要从一个文件行逐行读取数据,使用Array.push()将数据逐行存储在一个数组中。 我正在阅读使用readline npm软件包的文件。 但是,当我试图在遍历整个文件后调用数组时,它显示了一个空数组。 var fs = require('fs'), readline = require('readline'), stream = require('stream'); var instream = fs.createReadStream('sample.txt'); var outstream = new stream; outstream.readable = true; outstream.writable = true; function printArray(ArrayVar){ console.log(ArrayVar); } function AddText(InputStream){ var Text = new Array; var rl = readline.createInterface({ input: instream, output: outstream, terminal: false }); rl.on('line',function(line){ Text.push(line); }); return […]

AWS Lambda函数如何更新DynamoDB表中的所有logging?

我正在使用需要运行DynamoDB表中的所有项目并更新某些属性的AWS Lambda函数(节点4.3)。 我遇到的问题是如何让Lambda等待所有DynamoDB操作完成。 var async = require('async'); var aws = require('aws-sdk'); var doc = new aws.DynamoDB.DocumentClient(); exports.handler = (event, context, callback) => { doc.scan({ TableName: 'Occupations_dev' }, function (err, data) { console.log(data.Items.length); var funcs = []; data.Items.forEach(function (item) { funcs.push(function (cb) { item.Popularity = 0; doc.put({ TableName: 'Occupations_dev', Item: item }, function (err, data) { […]

Node js:Express jsasynchronousdb查询执行 – 返回结果有undefiend

刚开始学习express js框架,下面是我的简单的数据库查询执行部分,它调用了这个url localhost:3000/api/test 。 db.query('SELECT * FROM user', function (error, results, fields) { if (error) throw error; console.log('The result is:', results[0].id); return results; }); 它真的asynchronous吗? 假设另一个用户请求这个url,他是否需要等待以前的查询执行? 我听说过async包,但不知道这是如何适用于我的情况 UPDATE 我得到了正确的结果console.log(); 但是当我返回结果我得到了未定义的错误 这是我的model.js module.exports = { getUser:function () { db.query('SELECT * FROM user', function (error, results, fields) { if (error) throw error; console.log('The result is: ', results[0].id); […]

如何在JavaScript中parsing后立即处理asynchronous结果?

我有一个asynchronous函数需要相当多的时间来callback,需要运行一个input数组,并将结果传递给后续操作。 我最初的方法是基于Promise的: Promise.all(entries.map((entry) => { return new Promise((resolve, reject) => { processEntry(entry, resolve); }); })).then((outputs) => { outputs.forEach((output) => { return console.log(output); }); callback(); }); 与此有关的问题是,输出只在得到解决之后得到处理(或在这种情况下logging)。 为了让他们尽快解决问题,我尝试了这种更老式的方法: var i = 0; entries.forEach((entry) => { processEntry(entry, (output) => { console.log(output); if (++i >= entries.length) callback(); }); }); 这适用于我特殊的情况,但似乎不是一个正确的通用解决scheme,因为不再保证输出顺序。 为了达到预期的效果,至今我可以想到的最好的方法是在entries填入输出为原始索引的数组,并且每当新的输出出现时,就用数组的起始处理输出单独的滑动索引,当它达到一个undefined时候停止。 有没有更好的方法来实现这一目标?

数组中的NodeJs itemvariables只取得for循环中的第一个值

我正在使用expressJs路由一些POST请求。 从客户端传递对象的对象,然后在服务器中用for循环遍历每个对象。 我的问题是,循环中的variablescantidad只取第一个值,而不是刷新到pool.query ,而是在pool.query之前pool.query正确的值。 所以,下面的行是好的。 console.log("cantidad before query: " + cantidad); 但是下面的线是不好的。 它有第一个价值。 console.log("cantidad in query: " + cantidad); 这是我的代码的一部分。 for (var key in objects) { if (objects.hasOwnProperty(key)) { … console.log("cantidad before query: " + cantidad); pool.query(qProducto,idProducto, function (error, results, fields { if (error) { … } else { console.log("cantidad in query: " + cantidad); […]

Node.js:fs.readdir不会返回由fs.writeFile写入的文件

我的应用程序 一个简单的Node.js http服务器,它通过调用POST /deploy在给定的目录中创build文件。 在写入文件后,我想使用console.log列出该目录中的所有文件。 为了创build文件( POST /deploy ),我打电话给: fs.writeFile(filename, content, 'utf8', callback(null, {'newFile': filename})); callback函数写入HTTP响应,并使用以下命令列出文件: fs.readdir(some_directory, (err, files) => { files.forEach(file => { console.log(file); // Do something with the file } } 我的问题 新文件没有在callback中列出。 只有在我再次调用部署之后,才会列出上一个文件。 例如,如果我使用/deploy连续创build文件a和b ,则仅在创buildb时列出b ,并且在进行另一次调用之前b不会列出。 我假设在调用callback函数时文件没有closures,只有在稍后调用fs.readdirclosures后fs.readdir看到文件。 我怎样才能调用callback函数只有在文件被正确closures,并可以使用fs.readdir列出? 我试过了什么 阅读fs.close()手册。 它工作,但需要一个fd ,而不是文件名,所以我必须打开文件只是为了closures它,这似乎很麻烦: fs.open(fd,write,buffer){fs.cln(fd,callback(null,{'newFile':filename })); }); }); 在SO中寻找类似的问题

NodeJS:阻塞作业的asynchronous映射

让我们举一个例子,我有一个巨大的数组被串化的JSON。 我想遍历这个数组,并使用JSON.parse(阻止事件循环)将所有string转换为JSON。 var arr = ["{…}", "{…}", … ] //input array 这是第一种方法(可能会阻塞事件循环一段时间): var newArr = arr.map(function(val){ try{ var obj = JSON.parse(val); return obj; } catch(err){return {};} }); 第二种方法是使用async.map方法(与第一种方法相比,这会更有效吗?): var newArr = []; async.map(arr, function(val, done){ try{ var obj = JSON.parse(val); done(null, obj); } catch(err){done(null, {});} }, function(err, results){ if(!err) newArr = results; } ); 如果第二种方法相同或几乎相同,那么在node.js中这样做的有效方式是什么? […]

回环asynchronous/等待UnhandledPromiseRejectionWarning问题

在回环3当我实现asynchronous/等待在前保存操作挂钩 Entry.observe('before save', async (ctx, next) =>{ if(ctx.instance.images){ Entry.upload(ctx.instance.images[0].src).then(data => { ctx.instance.image = data; }); } }); 控制台打印这个错误 (node:29323) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Callback was already called. (node:29323) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero […]