node.js如何多任务function

我为我的web服务器使用node.js。 当用户请求页面时,我需要调用3个不同的函数,每个函数都返回与用户相关的不同数据集合,并将它们显示在一个页面中。

  1. 用户数据
  2. 用户订单
  3. 计算数据(类似购买项目)

目前,我调用函数#1,当callback发生时,我调用函数#2,当callback发生时,最后函数#3。 之后,我发送回应。

有没有一种方法可以一次/同时请求所有3个function,多任务处理,然后将结果返回给响应?

谢谢…

是的,您可以使用nodejs的asynchttps://www.npmjs.org/package/async )模块以非常简单的方式来完成。

使用async.parallelhttps://github.com/caolan/async#parallel ),可以asynchronous执行多个函数,并在最终callback中获取数组中的所有结果,
像这样..(例如从文件)

 async.parallel([ function(callback){ setTimeout(function(){ callback(null, 'one'); }, 200); }, function(callback){ setTimeout(function(){ callback(null, 'two'); }, 100); } ], // optional callback function(err, results){ // the results array will equal ['one','two'] even though // the second function had a shorter timeout. }); 

在这种情况下正确的答案是使用async , 如提到的Yogesh Katri 。 使用和阅读非常简单。

如果你需要更多的灵活性,我build议你看一看Q ,它和promise对象一起工作。 这允许你有一个通用的实现来处理代码中的asynchronous调用。

 // Create for each task a _promise_, execute each of them in parallel // and let them `resolve` their promise in the callback while you're // waiting on the _main_ flow with the `Q.all` method. var Q = require('q'); // Wrapper to create promises function promiseMe(fn) { var defer = Q.defer(); fn(defer); return defer.promise; } // Create a fake async task (via setTimeout) function fakeTask(desc, delay, result) { return promiseMe(function(defer) { console.log('Executing task ' + desc + ' ...'); setTimeout(function() { console.log('Done executing task ' + desc + '.'); defer.resolve(result); }, delay); }); } // Create an array of promises for all our tasks var promises = [ fakeTask('user data', 2000, { user: 'hansch' }), fakeTask('user orders', 1000, [ { order: 1 }, { order: 2 } ]), fakeTask('something else', 3000, { magic: true }) ]; console.log('Waiting for all tasks to complete ...'); // Tell Q to wait for all promises to resolve Q.all(promises).then(function(result) { console.log('All done.'); console.log('User data', result[0]); console.log('User orders', result[1]); console.log('Something else', result[2]); });