Tag: asynchronous

如何在node.js中做这个curl操作

我想要做的是在node.js这个curl操作。 curl -XPOST localhost:12060/repository/schema/fieldType -H 'Content-Type: application/json' -d ' { action: "create", fieldType: { name: "n$name", valueType: { primitive: "STRING" }, scope: "versioned", namespaces: { "my.demo": "n" } } }' -D – build议表示赞赏。

如何在NodeJs中使用asynchronous数据源创build可读stream?

环境: NodeJS,Express,DynamoDB(但真的可以是任何数据库) 场景:需要读取大量logging并作为可下载文件返回给用户。 这意味着我无法一次缓冲所有的内容,然后将其发送到Express的响应中。 此外,我可能需要多次执行查询,因为所有数据可能不会在一个查询中返回。 build议的解决scheme:使用一个可读的stream,可以传送到Express中的响应stream。 我开始创build一个从streaminheritance的对象.Readable并实现了一个推送查询结果的_read()方法。 问题是在_read()中调用的数据库查询是asynchronous的,但是stream.read()是同步方法。 当stream被传送到服务器的响应时,在db查询甚至有机会执行之前,调用多次该读取。 所以查询被调用多次,甚至当查询的第一个实例完成并执行推(空),其他查询完成,我得到一个“EOF后”(错误)。 有没有办法正确使用_read()? 我应该忘记_read(),只是在构造函数中执行查询和push()结果? 我应该执行查询并发出数据事件而不是push()? 谢谢 function DynamoDbResultStream(query, options){ if(!(this instanceof DynamoDbResultStream)){ return new DynamoDbResultStream(query, options); } Readable.call(this, options); this.dbQuery = query; this.done = false; } util.inherits(DynamoDbResultStream, Readable); DynamoDbResultStream.prototype._read = function(){ var self = this; if(!this.done){ dynamoDB.query(this.dbQuery, function(err, data) { if (!err) { try{ for(i=0;i<data.Items.length;i++){ self.push(data.Items[i]); } […]

什么是Node.js域模块的替代scheme?

domain置模块 将被弃用: 稳定性:0 – 弃用 此模块正在等待弃用。 一旦更换API已经完成,这个模块将被完全弃用。 大多数最终用户不应该有理由使用这个模块。 绝对必须具有域提供的function的用户可能暂时依赖它,但是应该期望在将来不得不迁移到不同的解决scheme。 据此,目前他们并不真正推荐解决scheme。 但是如何实现一个类似于下面的function: var d = require('domain').create(); d.on('error', function(err) { console.log(err); }); d.run(function() { setTimeout(function () { throw new Error("Something went really wrong in async code."); }, 1000); }); 所以,这处理从asynchronous的东西引发的错误,但domain模块已被弃用。 如何将此代码迁移到更好的东西? 我的用例是我正在编写一个接受函数作为input的库,它运行该函数并显示结果(实际上,您可以将其视为unit testing库): myLib.it("should do something", function (done) { setTimeout(function () { // Some async code // […]

在JavaScript中的思考诺言(蓝鸟在这种情况下)

我试图让我的头一些不那么微不足道的承诺/asynchronous使用情况。 在一个例子中,我现在正在摔跤,我有一个从一个knex查询(可数组)返回的书籍数组,我想插入到数据库中: books.map(function(book) { // Insert into DB }); 每本书的内容如下所示: var book = { title: 'Book title', author: 'Author name' }; 但是,在插入每本书之前,我需要从一个单独的表中检索作者的ID,因为这些数据是正常的。 作者可能也可能不存在,所以我需要: 检查作者是否存在于数据库中 如果是,请使用此ID 否则,插入作者并使用新的ID 但是,上述操作也都是asynchronous的。 作为插入操作的先决条件,我可以只使用原始映射中的承诺(获取和/或插入标识)。 但是这里的问题在于,因为所有东西都是asynchronous运行的,代码可能会插入重复的作者,因为初始的check-if-author-exists与insert-a-new-author块是分离的。 我可以想出几个办法来达到上述目的,但都涉及分拆承诺链,一般显得有些杂乱。 这似乎是一个相当普遍的问题。 我确定我在这里错过了一些基本的东西! 有小费吗?

在Ember中保存预订时,更新已经存在的关系

我有两个模型: Event.js: export default Model.extend({ checked : attr({ defaultValue: false }), isActive : attr(), createdAt : attr(), updatedAt : attr(), start : attr(), end : attr(), menPrice : attr(), womenPrice : attr(), information : attr(), meetingPoint : attr(), title : attr(), hiw : attr(), tip : attr(), bookings : hasMany('booking', { async: true}) }); 和Booking.js: […]

如果将文件可写入stream传递给Node.js中的Console构造函数,是否正在向其写入asynchronous?

我已经阅读了有关Console对象的文档和有关进程I / O的说明 ,但是不知道以下内容是否会导致同步或asynchronous操作: const out = fs.createWriteStream('./out.log') const logger = new Console(out) logger.log('foo') 我很好奇这是怎么回事,特别是在* Nix系统上。 但我不希望这在Windows上有不同的performance。 我所要问的原因是因为我已经构build了一个利用Console对象的logging器,但是我不希望logging器在生产中将日志写入文件时被阻塞。

如何使用asynchronousI / O将实时数据集写入磁盘?

我是在node.js中开发的新手(尽pipe在客户端JavaScript方面经验相对丰富),并且在处理node.js中的asynchronous操作时遇到了很多关于良好实践的问题。 我的具体问题(虽然我想这是一个相当通用的主题)是,我有一个node.js应用程序(在树莓派上运行),每隔10秒将数个温度探测器的读数logging到内存数据结构中。 这工作得很好。 数据随着时间在内存中积累,随着数据积累并达到特定的大小阈值,数据会定期老化(只保留最后N天的数据)以防止数据增长超过一定的大小。 这个温度数据被用来控制一些其他的电器。 然后,我有一个单独的间隔计时器,每隔一段时间将这些数据写出到磁盘(如果进程崩溃,则保留它)。 我使用asynchronousnode.js( fs.open() , fs.write()和fs.close() )磁盘IO将数据写入磁盘。 而且,由于磁盘IO的asynchronous特性,在我看来,我试图写入磁盘的数据结构可能会在我写入磁盘的过程中被修改。 这可能是一件坏事。 如果在将数据写入磁盘时数据只附加到数据结构中,那么实际上并不会导致写入数据的方式出现问题,但是在某些情况下,在logging新数据时可能会修改较早的数据这真的会弄乱我在写入磁盘过程中的完整性。 我可以想到我可以在我的代码中使用各种有点丑陋的保护措施,例如: 切换到同步IO以将数据写入磁盘(对于服务器响应的原因,实际上并不想这么做)。 设置一个标志,当我开始写数据,并没有logging任何新的数据,而该标志设置(导致我在写入过程中丢失的数据logging)。 选项2更复杂的版本,我设置标志和设置标志时,新的数据进入一个单独的临时数据结构,当文件IO完成,然后合并真实的数据(可行,但似乎丑陋)。 拍摄原始数据的快照副本,并花时间将该副本写入磁盘,知道没有人会修改副本。 我不想这样做,因为数据集是相当大的,我在有限的内存环境(树莓派)。 所以,我的问题是当asynchronousIO的其他操作可能需要修改该数据时用什么devise模式来编写一个大的数据集? 处理我的问题的方法是否比上面列出的具体解决方法更多?

callback()或返回callback()

有可能我不太了解Node的事件循环。 说我有一个函数foo包含一个asynchronous函数async_func 。 我有吗 //1 function foo(callback) { //stuff here async_func(function() { //do something callback(); }); //this eventually get executed } 要么 //2 function foo(callback) { //stuff here async_func(function() { //do something return callback(); }); //never executed }

在.NET中使用C#可以在没有multithreading的情况下实现基于事件的asynchronous模式吗?

我为Node.js的build筑devise感到惊讶,并想知道C#是否有这样的devise能力: asynchronous,基于事件/事件循环,无阻塞I / O,无需multithreading。

使用promise来处理node.js中的MySQL返回值

我有一个python背景,目前正在迁移到node.js. 由于其asynchronous性质,我有调整到node.js的问题。 例如,我试图从MySQL函数返回一个值。 function getLastRecord(name) { var connection = getMySQL_connection(); var query_str = "SELECT name, " + "FROM records " + "WHERE (name = ?) " + "LIMIT 1 "; var query_var = [name]; var query = connection.query(query_str, query_var, function (err, rows, fields) { //if (err) throw err; if (err) { //throw err; console.log(err); logger.info(err); […]