Tag: asynchronous

asynchronous在Node.js中调用模式到API

构build我的第一个“严重的”Node.js项目(使用Express)。 我需要对几个REST API使用几个调用,收集所有结果,按摩它们,并返回一个完整的JSON到客户端(HTML5 + AJAX)。 调用API A 调用API B 再次调用API A(来自B的结果) 将3个调用的结果处理成JSON response.send(结果) 我敢肯定/希望有一个简单的模式,或解决scheme,或模块,我只是没有正确的谷歌:)我也将不胜感激意见放在这样的操作(在'路线'?分开的文件?等等。) 谢谢你的时间!

在新的Promise()构造函数中使用asynchronous/等待的反模式?

我使用async.eachLimit函数来一次控制最大操作数。 const { eachLimit } = require("async"); function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); }); } 正如你所看到的,我不能将myFunction函数声明为async,因为我不能访问eachLimit函数的第二个callback函数中的值。

可以在node.js模块中asynchronous初始化导出吗?

由于MongoDB数据库访问和初始化在Node.js上是asynchronous的,所以我想为每个集合定义一个模块,在db初始化之后导出包装数据库调用。 这样的“Cars.model.js”模块看起来像这样: var db = require("mongodb"); db.collection("cars", function(err, col) { exports.getCars = function(callback) { col.find({}, callback); }; }); 以便其他模块可以运行: var carModel = require("Cars.model.js").getCars; getCars(err, cars) { // (do something with cars here…) }; 它发生在我身上, getCars是未定义的,因为数据库访问尚未初始化时,我的第二个模块运行。 你如何处理创build这样的asynchronous数据库模型?

节点Gruntasynchronous任务循环与闭合不起作用

预先感谢您看看这个。 我有一个循环中的asynchronous任务不工作。 我已经确定: 将我的循环variables“key”封装在闭包中,以避免经典的“仅限最后一个值”的问题,循环在asynchronous任务返回一个值之前完成很长时间,只显示最后一个值。 调用完成(错误)完成我的asynchronous任务(根据Gruntjs常见问题解答) 使用hasOwnProperty()来确保键是对象的实际属性,而不是来自原型。 遵循node.exec例子的格式,除了把exec的值赋给一个variables – 我试过了,但是没有帮助。 见下面的第一个参考。 这个函数输出…什么都没有! 出于某种原因,grunt.log.writeln语句甚至没有发射。 任务完成没有错误。 我还尝试添加20秒的延迟,以防脚本在asynchronous任务返回之前完成。 奇怪的是,如果我不叫“完成(错误),”文件被写入文件(当我用grunt.file.write语句replacewriteln的)。 var done = this.async(), exec = require('child_process').exec, myJSON = { "file1" : "C:/home/me/jquery.js", "file2 " : "C:/home/me/grunt.js", … "fileN" : "C:/home/me/N.js" }, count; for (var key in myJSON) { if (myJSON.hasOwnProperty(key)) { (function (key) { exec( 'type "' + myJSON[key] […]

Node.js同步与asynchronous

我目前正在学习node.js,我看到2个同步和asycn程序(同一个)的例子。 我明白一个callback的概念,但我试图理解第二个(asynchronous)的例子的好处,因为它们似乎是两个正在做同样的事情,即使这种差异… 你能否详细说明为什么第二个例子会更好? 我会很乐意得到更广泛的解释,这将有助于我理解这个概念。 谢谢!! 第一个例子: var fs = require('fs'); function calculateByteSize() { var totalBytes = 0, i, filenames, stats; filenames = fs.readdirSync("."); for (i = 0; i < filenames.length; i ++) { stats = fs.statSync("./" + filenames[i]); totalBytes += stats.size; } console.log(totalBytes); } calculateByteSize(); 第二个例子: var fs = require('fs'); var count = 0, totalBytes […]

Node.js – parsing简单的JSON对象和访问键和值

我是Node新手,并努力访问一个简单的JSON对象。 我的request.body将具有类似于以下的JSON内容: { "store_config": [ { "name": "hello", "name2": "world" } ] } “store_config”值将始终存在,但其中的键和值可以是任何值。 我如何迭代通过键和值访问每个? 我也想以asynchronous的方式处理每一个。 欣赏任何想法或方向。 UPDATE console.log(typeof(request.body)); 返回: Object parsedBody = JSON.parse(request.body); 收益: SyntaxError: Unexpected token o at Object.parse (native) 更新2 – 进一步debugging: 当我尝试遍历数组时,只有一个值: request.body.store_config.forEach(function(item, index) { console.log(index); console.log(request.body.store_config[index]); }); 收益: 0 { name: 'hello', name2: 'world' }

非法break语句(Node.js)

尝试在Node.js和MongoDB中查找唯一标识,方法是创build一个查询MongoDB现有标识的while循环,直到find唯一值。 如果这个ID已经被使用了,那末一个数字就会增加,直到Mongo什么也没有返回。 除了break;之外,一切都在工作break; 声明何时find唯一的ID。 Node.js返回: SyntaxError: Illegal break statement 代码: db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){ //if ID exists already if (data.id){ var uniqueNumber = 1; while (1) { var uniqueNum_string = uniqueNumber.toString(); var newUnique = data.id + uniqueNum_string; db.collection('landmarks').findOne({'id':newUnique}, function(err, data){ if (data.id){ uniqueNumber++; } else { saveLandmark(newUnique); break; } }); } } else { saveLandmark(uniqueIDer); } […]

什么函数在NodeJs和JS中放入EventLoop

我一直在阅读一些NodeJs的文章,以了解它的asynchronous性质,在这期间我发现了这个,并且非常喜欢Node.js,Doctor's Offices和Fast Food Restaurants – 了解事件驱动的编程 有一个叫做EventLoop的东西是基于FIFO的队列。 他们说,当一个asynchronous函数被击中时,它会被放到EventLoop并继续在那里执行。 我在这里有点困惑。 例如这里说: 实际上,像setTimeout和setInterval这样的asynchronous函数被推送到一个称为Event Loop的队列中。 并在同一篇文章中: 事件循环是一个callback函数的队列。 当asynchronous函数执行时,callback函数被推入队列中。 JavaScript引擎不会开始处理事件循环,直到执行asynchronous函数之后的代码。 但它不同于这个图像: 我们来看下面的例子: console.log("Hello,"); setTimeout(function(){console.log("World");},0); 所以从我从这些不同的解释中得知, 第一个说function(){console.log("World");} setTimeout()函数的一部分,也就是callback,将放在EventLoop中。 一旦setTimeout完成,它也将执行EventLoop 。 另一个说,整个事情setTimeout(function(){console.log("World");},0); 将被放入EventLoop并将被执行… 我现在更困惑了。 这应该是简单的,但我想一个好的,但简单的解释对我来说是很好的下列问题: 上述哪一项是真实的? 什么是EventLoop? 比喻,方法,对象等真实的东西? 如果我想从零开始实现一个类似于EventLoop的事情,它会如何简单? 也许有些代码会很好看。

我知道callback函数asynchronous运行,但为什么?

哪一部分的语法提供了这个函数应该在其他线程中运行并且是非阻塞的信息? 让我们考虑node.js中的简单asynchronousI / O var fs = require('fs'); var path = process.argv[2]; fs.readFile(path, 'utf8', function(err,data) { var lines = data.split('\n'); console.log(lines.length-1); }); 究竟是什么使得它发生在后台? 任何人都可以解释它精确或粘贴到一些好的资源的链接? 我看到的地方有很多关于callback是什么的信息,但没有人解释为什么它实际上是这样的。 这不是关于node.js的具体问题,而是关于每种编程语言中callback的一般概念。 编辑: 可能我提供的例子在这里不是最好的。 所以我们不要考虑这个node.js代码片段。 我一般问 – 什么使程序在遇到callback函数时继续执行的技巧。 callback概念是一个非阻塞的语法是什么? 提前致谢!

task.js生成器/ promise和asynchronouscallback

我想知道在JavaScript中处理asynchronous代码时,哪两种方法更好。 我想了解哪个方法导致更干净的代码。 我使用的承诺,他们似乎比asynchronous方法( https://github.com/caolan/async )更灵活。 我也知道Task.js库( http://taskjs.org/ ),但这依赖于Ecmascript Harmony的一部分yield关键字。