-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpromesas.js
More file actions
149 lines (127 loc) · 4.38 KB
/
promesas.js
File metadata and controls
149 lines (127 loc) · 4.38 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
// Las promesas con ES 2015 ya estan soportadas nativamente.
// Viene a resolver los problemas del callback hell
// Las promesas son objetos y están asociados alguna tarea asicrónica
// Existen 3 estados internos de las Promesas:
/*
1.- Pending
2.- Fullfiled
3.- Rejected
*/
const promise = new Promise(function(resolve, reject){
setTimeout(function(){
resolve()
}, 1000)
})
promise
.then(function(){
})
.catch(function(err){
})
// Ejemplo con promesas:
//Las promesas pueden tener tres estados y estan asociados
// con tareas asincronicas, los tres estados son pending, fullfill
//rejected - se produjo un error
const promise = newPromise(function(resolve, reject) {
//En esta funcion debemos realizar una tarea asincrona
//Esimportante llamar a resolve o reject, a cualquiera de los
// dos, detro de este cuerpo de la funcion de promise
setTimeout(function() {
reject(newError('Se produjo un error'))
}, 1000)
})
//con then podemos obtener el resultado exitoso y en caso
// de tener un resultado no exitoso lo atrapamos con catch
promise
.then(function() {
})
.catch(function(err) {
})
//Para este caso ya no vamos a necesitar los callback
// Pues con promise nos podemos ahorrar estas peticiones y solo
// vamos a necesitar la URL de las peticiones que necesitaremos
function get(URL/*, callback*//*onfinish*/) {
// Usando promesas
return new Promise(((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
const DONE = 4;
const OK = 200;
if (this.readyState == DONE) {
if (this.status == OK) {
//TODO OK
//Primero va el error y despues la respuesta ya sea que se haya cumplido o no con el request
// JSON.parse(argumento) convierte un texto plano a formato JSON.
resolve(JSON.parse(this.responseText));
//response text contiene todos los parametros de la respuesta de la peticion y se convierte a formato JSON.
} else {
//HUBO UN ERROR
reject(newError("Se produjo un Error al realizar el request" + this.status)
);
console.log(xhr.status);
}
}
};
xhr.open("GET", URL);
xhr.send(null);
}))
// Utilizando Callbacks
// const xhr = new XMLHttpRequest();
// xhr.onreadystatechange = function() {
// const DONE = 4;
// const OK = 200;
// if (this.readyState == DONE) {
// if (this.status == OK) {
//TODO OK
//Primero va el error y despues la respuesta ya sea que se haya cumplido o no con el request
// JSON.parse(argumento) convierte un texto plano a formato JSON.
// callback(null, JSON.parse(this.responseText));
//response text contiene todos los parametros de la respuesta de la peticion.
// } else {
//HUBO UN ERROR
// callback(
// new Error("Se produjo un Error al realizar el request" + this.status)
// );
// console.log(xhr.status);
// }
// }
// };
// xhr.open("GET", URL);
// xhr.send(null);
}
function _handleError(error) {
console.log(`Resquested failed: ${error}`);
}
//En este caso then recibe una funcion la cual a su vez
//recibe como parametro lo que nos devuelve la promesa cuando
// fue exitosa en este caso el JSON.parse
let luke;
get("https://swapi.co/api/people/1/")
.then((response) => {
luke = response;
return get('https://swapi.co/api/planets/1/')
})
.then((homeworld) => {
luke.homeworld = homeworld;
console.log(`${luke.name} nació en ${homeworld.name}`);
console.log(`${luke.name} nació en ${luke.homeworld.name}, codigo con igualdad de objeto`);
})
.catch((err) => _handleError(err));
//Utilizando el metodo Fetch
//Fetch realiza algo similar a get y que funciona tambien con
// promesas, es soportado de manera nativa en mucho de los navegadores, el cual soporta formatos AJAX, POST, REQUEST.
var lukeFetch;
fetch("https://swapi.co/api/people/1/")
.then(response =>
//Este response me regresa un JSON
response.json())
.then(json => {
lukeFetch = json;
return fetch('https://swapi.co/api/planets/1/');
})
.then((response) => response.json())
.then(json => {
lukeFetch.homeworld = json;
console.log(`${lukeFetch.name} nació en ${json.name}, código con FETCH`);
console.log(`${lukeFetch.name} nació en ${lukeFetch.homeworld.name}, codigo con igualdad de objeto con FETCH`);
})
.catch((err) => _handleError(err));