-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path08_generador3.js
86 lines (68 loc) · 2.22 KB
/
08_generador3.js
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
"use strict";
console.log('empiezo');
function espera( milis, n) {
return new Promise(function(resolve, reject){
setTimeout(() => {
// si me llaman con valor n impar devuelvo fallo
// solo por motivos de testing
var err = (n % 2 !== 0) ? new Error('ARRG ' + n + ' es impar!') : null;
if (err) {
return reject(err);
}
return resolve({id: n, name: 'Brown'});
}, milis );
});
}
// Llamada normal a la función espera
//espera(1000, 2).then( function(data) {
// console.log(data);
//}).catch( function(err) {
// console.log('ERROR', err);
//});
sync( function* () {
try{
let res = yield espera(1000, 0);
console.log('res', res);
res = yield espera(1000, 12);
// si lo deseo puedo controlar un error para que no pare mi ejecución
//res = yield espera(1000, 1).then((val)=>{
// console.log('fue bien,', val);
// return val;
//}).catch((err) => {
// console.log('*** estoy herido seguir sin mi!', err);
//});
console.log('res1', res);
res = yield espera(1000, 2);
console.log('res', res);
res = yield espera(1000, 3);
console.log('res', res);
res = yield espera(1000, 4);
console.log('res', res);
console.log('fin');
} catch (ex) {
console.log('*** muerto!', ex);
}
})();
// de forma alternativa al try/catch tambien podría recoger el error así:
// sync.catch((err)=>{
// console.log('Oh no un error!:', err);
//});
function sync(makeGenerator){
return function () {
var generator = makeGenerator.apply(this, arguments);
function handle(result){
// result => { done: [Boolean], value: [Object] }
if (result.done) return Promise.resolve(result.value);
return Promise.resolve(result.value).then(function (res){
return handle(generator.next(res));
}, function (err){
return handle(generator.throw(err));
});
}
try {
return handle(generator.next());
} catch (ex) {
return Promise.reject(ex);
}
}
}