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