Articles of asynchronous

callback方法while循环javascript

我想在这样的while循环中使用callback函数: do { Methodwithcallback(..function () { //do something }); } while (); function()不会被调用,但它没有loop工作。 该方法需要一些时间来执行,我想在方法完成后重复loop 。 为什么方法在loop被忽略? 我正在使用Node.js

节点具有完整path的asynchronousmkdir

我目前使用shell.js的mkdir -p在我的node.js代码是同步的。 在shell.mkdir中使用'-p'来创build一个完整path的目录,这是fs.mkdir无法做到的。 if(fs.existsSync(archivePath + "\\" + site + "\\" + year)){ // check if site folder exists console.log(archivePath + "\\" + site + "\\" + year + " exists"); } else { console.log(archivePath + "\\" + site + "\\" + year + " does not exist… creating full path now"); shell.mkdir('-p' , archivePath + […]

NodeJs + NickJs:在asynchronous函数中进行同步调用

我正在使用NickJs来制作WebRequests。 在大多数情况下,NickJs做我所需要的(打开浏览器,导航等)。 不过,我需要在继续执行代码之前对另一个服务进行同步调用(自定义WebRequest)。 我无法弄清楚如何正确地使这个调用同步。 我当前的设置使用包装在asynchronous函数中的NickJs,并使用“await”等待WebRequest返回。 我不认为我可以将这个用于我的自定义请求,但我觉得我应该能够做我自己的function,并等待WebRequest完成,然后继续执行代码。 例: const nick = new Nick({ printNavigation: false, printResourceErrors: true, printPageErrors: true, resourceTimeout: 10000, userAgent: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36", }) ; (async () => { await tab.open("https://google.com") //custom function here to request another webpage from another service //and wait for the result […]

在节点中如何声明全局variables只能用于当前的执行上下文,在asynchronouscallback中不需要?

在节点中如何声明全局variables只能用于当前的执行上下文,在asynchronouscallback中不需要? var obj = 'something' setTimeout( function(){ // callback context // i want to get null or undefined value for obj console.log(obj) }, 500);

在节点中,如何在当前执行上下文完成时得到通知?

我想跟踪当前执行上下文的结束。 当前执行环境完成后是否会发生任何事件? console.log('starts'); setTimeout(function(){ console.log('set timeout called'); }, 100); // something similar like this process.on('async', function(){ console.log('current execution context finished. event loop going to execute the next one!'); }

我怎样才能改善这个嵌套的asynchronous循环?

问题如下。 我有这样的对象数组: let myObj = [ {'db1':['doc1','doc2','doc3']}, {'db2':['doc4','doc5']}, {'db3':['doc7','doc8','doc9','doc10']} ] 请注意,这是我决定用于解决问题的数据结构,如果可以改进整体实施,则可以对其进行更改。 实际的数据库和文档ID是从格式如下的文本文件中读取的。 "db1","doc1" "db1","doc2" … 我的应用程序将同步遍历数据库列表。 在每个数据库迭代中,将会有一个文档列表的asynchronous迭代。 每个文件将被检索,处理并保存回数据库。 所以基本上在任何给定的实例:一个分贝,但多个文件。 我有一个像上面这样的工作实现: dbIterator :迭代dbs的同步外部循环。 传递给docIterator的callback将触发下一次迭代。 const dbIterator = function (x) { if (x < myObj.length) { let dbObj = myObj[x]; let dbId = Object.keys(dbObj)[0]; docIterator(dbId, dbObj[dbId], ()=>merchantIterator(x+1)); } else { logger.info('All dbs processed'); } }; docIterator :迭代文档的asynchronous循环。 […]

在实时Web应用程序中处理服务器响应的上下文

发现难以描述这个问题 – 所以请编辑,如果你知道更多的相关条款。 我正在构build一个基本上使用Redis(PubSub)+ Node.js + Socket.IO作为分发服务器的Web应用程序。 我有双向沟通,没有任何问题 – 但我需要能够从客户端(asynchronous)向服务器发出请求,并处理响应,同时处理其他可能会出现的无关响应。 这是我迄今为止,但我不是特别满意这种方法: 服务器 // Lots of other code redis.psubscribe('*'); redis.on("pmessage", function(pattern, channel, message) { // broadcast }); io.on('connection', function(client) { client.on('message', function(message) { switch(message.method) { // call relevant function } }); }); function object_exists(object_id) { // do stuff to check object exists client.send({method: 'object_exists', value: object_exists}); […]

Node.js:发送多个AJAX请求来开始后台作业队列

前言:我试图从一组给定的URL中asynchronous地预取内容。 我需要发送我的node.js应用程序大约40-60本地ajax请求,以便从客户端添加作业到队列( node-chain-gang )。 现在,我一次做所有的请求,并且我的node.js应用程序无法处理它,或者它不可能同时做这么多,但它最终崩溃或所有的请求不会使它通过正确的顺序。 我已经尝试在每个请求之间使用setTimeout无效(及时)。 有任何其他方式排队这些请求/连接asynchronous客户端? 还是有更有效的方法来做到这一点?

在Node.JS的callback里添加flow.add()(asyncblok模块的东东)

我试图控制我的代码stream白色Node.JS模块称为asyncblock,它使用光纤。 我想我有一些truble理解它的行为,下面的代码不起作用,stream程不等待.. person.save(function(err){ if(err) throw err; flow.add('goOn'); }); flow.wait('goOn'); 但是这个效果很好: person.save(flow.add('goOn')); flow.wait('goOn'); 我做错了什么? 这是完整的代码: http : //pastebin.com/UCsqPNiF

使用Mongoose和FeedParser在node.js中完成多个callback时跟踪

我正在编写一个批处理过程来读取RSS源,并通过Mongoose将内容存储在MongoDB中。 我会运行脚本,它会处理的内容就好了…但脚本不会返回到控制台。 我的假设是,我的数据库连接仍然是开放的,这就是为什么我没有返回。 我不能跟踪我的parsing完成时,因为我仍然可能有一些mongoose保存操作正在进行。 所以,我写了一个函数来跟踪我的开放数据库连接,以及我的RSSparsing的状态。 但是我的代码最终是非常冗长的。 我想知道是否有更好的模型/模式来做这样的事情。 var FeedParser = require('feedparser') , mongoose = require('mongoose'); var TEST_RSS_URL = "./test/data/20120303-seattle.rss"; var OPEN_DB_CONNECTIONS = 0; var PARSING_DONE = false; /* * Keeps track of open database connections, and closes the connection when done */ function track_and_close_database(mode) { switch(mode) { case 'open': OPEN_DB_CONNECTIONS++; break; case 'close': OPEN_DB_CONNECTIONS–; if […]