Tag: 操作

Node.js / Mongoose:发送信息到一个函数,并识别信息来操作

我有一个应用程序,它向3个不同的API REST服务器发出请求,收集并处理收到的对象信息,并使用mongoose的模型发送信息不同的Mongo集合(每个API REST一个)。 我的目标是在发送到MongoDB之前或同时(或之后)对不同的信息集进行操作。 下面是一个包含两个具体对象的例子,它们被检索并发送到数据库: Object1: { "name": "X", "a": 10, "b": 9, "n": 1502642712481, "iname": "ix", "_id": "59907f34040eb562d8d11d8c" } 对象2: { "name": "Y", "n": 1502642712552, "iname": "ix", "_id": "59907f34040eb562d8d11d8d", "b": "10", "a": "9", } 这些都有自己的模型,并正确插入到MongoDB保存,我想比较每个对象的“a”和“b”键(FYI: "iname"是一个共同的关键对象和"n"是在请求被返回时创build的时间戳)。 我想对'a'和'b'做的操作types是相对基础的math(目前): ax – ay和bx -by 任何想法,我怎么能做到这一点? 现在将每个对象保存到数据库的代码嵌套在一个无限循环中,如下所示: async function loopY() { setTimeout( async function () { var list […]

文件收集和聚合结果报告的操作与非阻塞IO

我想对任意大的文件进行一些任意的昂贵的工作。 我想实时报告进度,然后在所有文件处理完毕后显示结果。 如果没有与我的expression式匹配的文件,我想抛出一个错误。 想象一下,编写一个testing框架,加载所有testing文件,执行它们(不按特定顺序),实时报告进度,然后在所有testing完成后显示聚合结果。 用阻塞语言(比如Ruby)编写这个代码非常简单。 事实certificate,在节点中执行这个看似简单的任务时遇到了问题,同时也真正利用了基于事件的asynchronousIO。 我的第一个devise是连续执行每一步。 加载所有的文件,创build一个文件集合进行处理 处理集合中的每个文件 在处理完所有文件后报告结果 这种方法确实有效,但对我来说看起来并不完全正确,因为它导致我的程序中计算量更大的部分等待所有的文件IO完成。 Node是不是被devise来避免的那种等待? 我的第二个devise是处理每个文件,因为它是在磁盘上asynchronous发现的。 为了争辩,让我们设想一下这样的方法: eachFileMatching(path, expression, callback) { // recursively, asynchronously traverse the file system, // calling callback every time a file name matches expression. } 而这种方法的消费者看起来像这样: eachFileMatching('test/', /_test.js/, function(err, testFile) { // read and process the content of testFile }); 虽然这个devise感觉像是一个非常“节点”的IO工作方式,它有两个主要问题(至less在我大概是错误的实现): 我不知道什么时候所有的文件都被处理了,所以我不知道什么时候汇编和发布结果。 由于文件读取是非阻塞的,recursion的,我正在努力如何知道是否没有find文件。 我希望我只是在做一些错误的事情,并且有一些合理简单的策略,其他人用第二种方法工作。 […]