Articles of asynchronous

如何编写一个node.js函数等待事件在“返回”之前触发?

我有一个不是 Web应用程序的节点应用程序 – 它在返回1之前完成了一系列asynchronous任务。在返回之前,立即将程序结果打印到控制台。 在返回之前,如何确保所有asynchronous工作都已完成? 我可以通过在调用res.end()之前完成所有完成的任务来完成类似于Web应用程序的任务,但是在让脚本返回之前,我没有任何要调用的最终“事件”的等价物。 看到下面我的(破碎)函数,试图等到callStack为空。 我刚刚发现这是一种无意义的方法,因为在进入processObjWithRef中调用的任何asynchronous函数之前,节点会等待processHub完成。 function processHub(hubFileContents){ var callStack = []; var myNewObj = {}; processObjWithRef(samplePayload, myNewObj, callStack); while(callStack.length>0){ //do nothing } return 1 } 注意:以前我已经尝试了很多次,用像async这样的库来实现这种行为(请参阅我的相关问题: 如何使这个调用请求在nodejs中同步? ),所以请在提出任何build议之前将其答案和注释考虑在内基于“只使用asynchronous”的答案。

同步与asynchronous数据库访问

我想开发一个可能有数千个函数和数据库调用的复杂游戏。 我想知道是否真的有必要在asynchronous做我的数据库查询。 这是一个代码的痛苦,我所有的function将需要使用callback,而不是干净的return方法。 这是一个正常的方法? 考虑到MySQL数据库一次只处理一个查询,是否将这些调用以asynchronous方式进行编码呢?

callback已被称为asynchronous并行

您好我正在尝试使用asynchronous模块来检索两个用户,并做了一些处理后,他们都被检索,但我不断收到错误消息:callback已被调用。 以下是我目前的代码: app.get('/api/addfriend/:id/:email', function(req, res) { var id = req.params.id; var friendEmail = req.params.email; async.parallel([ //get account function(callback) { accountsDB.find({ '_id': ObjectId(id) }, function(err, account) { console.log(id); if (err || account.length === 0) { callback(err); } console.log(account[0]); callback(null, account[0]); }); }, //get friend function(callback) { accountsDB.find({ 'email': friendEmail }, function(err, friend) { console.log(friendEmail); if (err […]

asynchronous并行HTTP请求

我有一个应用程序加载大量的URL的控制stream问题。 我正在使用Caolan Async和NPM请求模块。 我的问题是,一旦函数被添加到队列,HTTP响应就会启动。 理想情况下,我想构build我的队列,并且只在队列启动时才开始发出HTTP请求。 否则,在队列开始之前,callback开始启动 – 导致队列过早完成。 var request = require('request') // https://www.npmjs.com/package/request , async = require('async'); // https://www.npmjs.com/package/async var myLoaderQueue = []; // passed to async.parallel var myUrls = ['http://…', 'http://…', 'http://…'] // 1000+ urls here for(var i = 0; i < myUrls.length; i++){ myLoaderQueue.push(function(callback){ // Async http request request(myUrls[i], function(error, response, html) […]

Java NIO非阻塞模式vs node.jsasynchronous操作

我还没有经历node.js的代码细节。 但是,经过对Node.js中线程的研究,我发现它有单线程来接受来自多个客户端的连接。 当与客户端连接时,它会触发连接事件并监听另一个客户端,并以asynchronous方式完全工作,客户端请求的hibernate操作从线程池执行,结果通过callback被发送回主线程(接受连接的线程)。 像Java中的NIO也是ServerSocketChannel一样,SocketChannel可以设置为非阻塞模式,并且使用select器单线程可以监控多个通道。 因此,使用NIO ServerSocketChannel,SocketChannel也可以从单个线程中为多个客户端asynchronouspipe理连接 那么,NIO的非阻塞模式和单线程asynchronous的node.js是否遵循相同的单线程概念? 正如他们说,他们在单线程执行。

在Javascript中查询本地值的首选方法是什么?

例如,有一个名为animationComplete的variables(来自第三方库)和一个名为happenAfterAnimation的函数: 一个简单的解决scheme如下所示: while(!animationComplete) { // Do nothing } happenAfterAnimation() 或者像这样一个更复杂的解决scheme: function tryHappenAfterAnimation() { if(animationComplete) { happenAfterAnimation() } else { setTimeout(tryHappenAfterAnimation, 100) } } setTimeout(tryHappenAfterAnimation, 100) 第一个解决scheme可能有一些开销,第二个解决scheme看起来有点脏。 由于future/promise是不是在当前版本的Javascript中可用,它的方式可能有点矫枉过正这里..我只是想知道是否有一个优雅和轻量级的方式来处理这种情况.. 有没有人有更好的方式来处理这个想法? 谢谢!

能够中止asynchronous调用

我正在使用es7风格的asynchronous/等待方法babeljs。 我有一个主脚本将调用一个对所有返回承诺的对象数组的asynchronous方法。 我使用Promise.all()等待所有这些返回,但是,这些任务可能需要很长时间,如果他们超过了阈值,我想中止所有这些,并以合适的方式处理任务。 有没有办法完成这样的事情? 目前我能想到的唯一方法是产生一个调用这些方法并等待它们全部解决的过程,如果达到了时间限制,它可以终止进程并执行任何需要的处理。 更新:关于主脚本正在等待的这些方法的一些说明…他们可能正在做一连串的操作(调用外部系统,stream文件到某处等),而不是执行一个可以独立取消的单个操作。 更新#2:一些未经testing的半伪代码 class Foo1 { async doSomething() { // call some external system // copy some files // put those files somewhere else (s3) } } class Foo2 { async doSomething() { // Do some long computations // Update some systems } } class FooHandler { constructor() { this.fooList = […]

JavaScriptcallback和函数式编程

“函数式编程只描述对程序的input执行的操作,而不使用临时variables来存储中间结果。 问题是如何应用函数式编程,而使用使用callback的asynchronous模块。 在某些情况下,你喜欢callback函数访问一个调用asynchronous引用的函数,但是callback的签名已经被定义了。 例: function printSum(file,a){ //var fs =…. var c = a+b; fs.readFile(file,function cb(err,result){ print(a+result);///but wait, I can't access a…… }); } 当然,我可以访问一个,但它会违背纯函数式编程范例

实时的ruby应用程序:CRAMP vs NODE.JS

我想知道你们中的任何一位是否对哪一个更好,以及在使用这些因素时应该考虑哪些因素有所了解

在Express-Validator中validation

我正在使用快速validation器进行validation。 我正在使用mongoose数据库,它也有内置的validation。我想知道我应该使用哪一个? 我也想知道express-validator中的validation是否平行。 以此代码为例: req.checkBody('email', 'Invalid email').notEmpty().isEmail().isUnique(); req.checkBody('password', 'Invalid possword').notEmpty().len(8, 30); req.checkBody('first_name', 'Invalid first_name').notEmpty().isAlpha(); req.checkBody('last_name', 'Invalid last_name').notEmpty().isAlpha(); req.checkBody('dateofbirth', 'Invalid dateofbirth').notEmpty.isDate(); isUnique()是一个自定义validation方法,用于检查电子邮件是否已经被注册或者没有被注册,它会向数据库查询以进行validation。 虽然没有在上面的代码中提到,但我也有其他几个请求后,我需要validation多个字段,其中每个数据库查询将在其中进行。 所以我想知道是否可以并行运行上面的每一个检查方法,因为这样做会更快,也会让我更喜欢。 我显然会喜欢使用一个模块来并行运行这些像asynchronous。 我也想知道这些检查方法是否已经并行运行? 请帮我弄清楚这个? 提前致谢。