node.jsのバージョンがv0.12以上であれば、Promiseを利用して簡潔に記述できます。
bash
1node -v
2# v0.12.7
3
4node task.js
5# taskA
6# taskA done
7# taskB1
8# taskB2
9# taskB3
10# taskB1 done
11# taskB2 done
12# taskB3 done
13# taskC
14# taskC done
15# all done
js
1// task.js
2var taskA= new Promise(function(resolve,reject){
3 console.log('taskA')
4 setTimeout(function(){
5 console.log('taskA done')
6 resolve()
7 },100)
8})
9
10taskA
11.then(function(){
12 var tasks= []
13
14 var taskB1= new Promise(function(resolve,reject){
15 console.log('taskB1')
16 setTimeout(function(){
17 console.log('taskB1 done')
18 resolve()
19 },100)
20 })
21 tasks.push(taskB1)
22
23 var taskB2= new Promise(function(resolve,reject){
24 console.log('taskB2')
25 setTimeout(function(){
26 console.log('taskB2 done')
27 resolve()
28 },100)
29 })
30 tasks.push(taskB2);
31
32 var taskB3= new Promise(function(resolve,reject){
33 console.log('taskB3')
34 setTimeout(function(){
35 console.log('taskB3 done')
36 resolve()
37 },100)
38 })
39 tasks.push(taskB3);
40
41 return Promise.all(tasks)
42})
43.then(function(){
44 var taskC= new Promise(function(resolve){
45 console.log('taskC')
46 setTimeout(function(){
47 console.log('taskC done')
48 resolve()
49 },100)
50 })
51
52 return taskC
53})
54.then(function(){
55 console.log('all done')
56})
57.catch(function(reason){
58 console.log('fail',reason)
59})