-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasync.js
More file actions
156 lines (136 loc) · 2.68 KB
/
async.js
File metadata and controls
156 lines (136 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// ESTILO errback
function serie() {
async1(function() {
console.log('async1', data);
async2(function(err, data) {
if (err) return console.log('fallo async2', err);
console.log('async2', data);
});
}, function(error) {
console.log('fallo async1', error)
});
}
serie();
function async1(cb) {
cb(null, 'data');
}
function async2(cb) {
cb('error2', 'data');
}
// ESTILO jQuery;
function serie() {
async1(
function(data) {
console.log('async1', data);
async2(
function(data) {
console.log('async2', data);
},
function(error) {
console.log('fallo async2', error);
}
);
},
function(error) {
console.log('fallo async1', error);
}
);
}
serie();
// CALLBACKS PARALLEL
function paralelo(cb) {
var contador = 0;
var error = false;
function errback(err, dato) {
contador++;
if (error) return;
if (err) {
error = true;
return cb(err, dato);
}
if (contador == 2) return cb(null, dato);
}
async1(errback);
async2(errback);
}
// CALLBACKS RACE
function carrera(cb) {
// Aca NO tengo que guardar cuantas veces se llamó,
// como es una carrera solo me interesa saber si se llamo.
var error = false;
function errback(err, dato) {
// Llamar al cb de carrera UNA SOLA VEZ con el error
// o con el dato
if (error) return;
error = true;
if (err) return cb(err, dato);
else return cb(null, dato);
}
async1(errback);
async2(errback);
}
// CALLBACK W/SUCCESS & ERROR
function notificacion(datos, exito, error, notif) {
var huboError = false;
var contador = 0;
function okCb(dato) {
if (huboError) return;
notif(dato);
contador++;
if (contador == datos.length) exito();
}
function errCb(err) {
if (huboError) return;
huboError = true;
error(err);
}
for (var i = 0; i < datos.length; i++) {
async(datos[i], okCb, errCb);
}
}
// ASYNC.SERIES
function uno (cb) {
setTimeout(function() {
console.log('1');
}, 100);
}
function dos (cb) {
setTimeout(function() {
console.log('2');
}, 100);
}
function pi (cb) {
setTimeout(function() {
console.log('3.1416');
}, 100);
}
var lista = [uno, dos, pi];
async.series(lista, function(err, resultados) {
if(err) {
return console.log(err);
}
for (var i = 0; i < lista.length; i++) {
console.log(lista[i]);
}
});
// ASYNC.WATERFALL
function hola(cb) {
setTimeout(function() {
cb(null, 'hola');
}, 100);
}
function que(arg1, cb) {
setTimeout(function() {
cb(null, arg1 + 'que');
}, 100);
}
function tal(arg1, cb) {
setTimeout(function() {
cb(null, arg1 + 'tal');
}, 100);
}
var lista = [hola, que, tal];
async.waterfall(lista, function(err, resultado) {
if (err) return console.log('Buu', err);
console.log('Wii', resultado);
});