Javascript node.js如何处理多任务函数

Javascript node.js如何处理多任务函数,javascript,node.js,Javascript,Node.js,我的Web服务器使用node.js。当用户请求一个页面时,我需要调用3个不同的函数,每个函数返回与用户相关的不同数据集,并在一个页面中显示它们 用户数据 用户订单 计算数据(与购买类似的项目) 目前,我调用函数#1,当回调发生时,我调用函数#2,当回调发生时,最后调用函数#3。之后,我发送回复 是否有一种方法可以一次/同时请求所有3个功能,多任务,然后将结果返回到响应 谢谢…是的,您可以使用nodejs的async()模块以非常简单的方式完成 使用ignasync.parallel(),您可以异

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

  • 用户数据
  • 用户订单
  • 计算数据(与购买类似的项目)
  • 目前,我调用函数#1,当回调发生时,我调用函数#2,当回调发生时,最后调用函数#3。之后,我发送回复

    是否有一种方法可以一次/同时请求所有3个功能,多任务,然后将结果返回到响应


    谢谢…

    是的,您可以使用nodejs的
    async
    ()模块以非常简单的方式完成

    使用ign
    async.parallel
    (),您可以异步执行多个函数,并在最终回调中获得数组中的所有结果,
    这样地。。(例如,来自文件)


    在这种情况下,正确的答案是使用
    async
    。它的使用和阅读都非常简单

    如果您需要更多的灵活性,我建议您考虑一下,它适用于promise对象。这允许您有一个通用实现来处理代码中的异步调用

    // 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]);
    });
    

    显示一些代码plz。。从你所说的,我没有发现任何复杂性。一些代码示例应该解释得更好..谢谢。我如何调用
    Q.all(promises)
    来执行此过程?
    // 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]);
    });