【发布时间】:2014-10-22 04:59:45
【问题描述】:
第一个模拟php - js中的函数睡眠:
function sleep(seconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + seconds*1000);
}
然后我的例子:
var async = require('async');
var a = function(callback)
{
sleep(10)
console.log("Hello ");
callback(null,'vals1')
// return 'prop'
};
var b = function(callback)
{
//I want get return 'prop' from a() its posible ?
sleep(30)
console.log("World");
callback(null,"vals2")
};
var c = function(callback)
{
//I want get return 'prop' from a() its posible ?
sleep(2)
console.log(" and U");
callback(null,"val3")
};
async.parallel(
[
a,b,c
],function(err,vals){
//console.log(err)//undefined
console.log(vals) //[val1,vals2]
console.log('finals')
}
);
series(tasks, [callback])
依次运行 tasks 数组中的函数,每个函数在前一个函数完成后运行。如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并立即使用错误的值调用回调。否则,当任务完成时,回调会收到一个结果数组。
parallel(tasks, [callback])
并行运行 tasks 函数数组,无需等到前一个函数完成。如果任何函数将错误传递给其回调,则会立即使用错误值调用主回调。任务完成后,结果将作为数组传递给最终回调。
我的结果:
break about 10sec
Hello
break about 30sec
World
and small break
and U
我希望按以下顺序执行功能:
output immediately
and U
break about 10sec
Hello
break about 30sec
World
如果在
上替换您的示例async.series()
结果是一样的
【问题讨论】:
-
在 node.js 中实现阻塞睡眠是一个非常糟糕的主意。
-
如果要对异步函数调用建模(例如 db 查询),请改用 build-in asynchronous
setTimeout。
标签: node.js asynchronous