Skip to content

Commit e58d5a7

Browse files
committed
final polish
1 parent 0b95532 commit e58d5a7

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

1-js/11-async/03-promise-chaining/01-then-vs-catch/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ promise
1111
...Dar nu aici:
1212

1313
```js run
14-
promisiune
14+
promise
1515
.then(f1, f2);
1616
```
1717

1-js/11-async/03-promise-chaining/article.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
Să ne întoarcem la problema menționată în capitolul <info:callbacks>: avem o secvență de sarcini asincrone care trebuie efectuate una după alta - de exemplu, încărcarea scripturilor. Cum putem să o codăm bine?
55

6-
Promisiunile oferă câteva rețete pentru a face acest lucru.
6+
Promisiunile oferă câteva rețete pentru a face asta.
77

88
În acest capitol acoperim înlănțuirea promisiunilor.
99

10-
Arată în felul următor:
10+
Arată așa:
1111

1212
```js run
1313
new Promise(function(resolve, reject) {
@@ -42,11 +42,11 @@ Aici fluxul este următorul:
4242

4343
Pe măsură ce rezultatul este transmis de-a lungul lanțului de gestionari, putem vedea o secvență de apeluri `alert`: `1` -> `2` -> `4`.
4444

45-
![](promisiune-în-catenar.svg)
45+
![](promise-handler-variants.svg)
4646

4747
Totul funcționează, deoarece fiecare apel la un `.then` returnează o nouă promisiune, astfel încât să putem apela următorul `.then` pe ea.
4848

49-
Atunci când un gestionar returnează o valoare, aceasta devine rezultatul acelei promisiuni, astfel încât următorul `.then` este apelat cu ea.
49+
Atunci când un gestionar returnează o valoare, aceasta devine rezultatul acelei promisiuni, așa că următorul `.then` este apelat cu ea.
5050

5151
**O greșeală clasică de începător: tehnic putem deasemeni adăuga mai multe `.then` la o singură promisiune. Aceasta nu este o înlănțuire.**
5252

@@ -72,15 +72,15 @@ promise.then(function(result) {
7272
});
7373
```
7474

75-
Ceea ce am făcut aici este doar mai mulți gestionari pentru o promisiune. Aceștia nu își transmit rezultatul unul altuia, ci îl procesează independent.
75+
Ceea ce am făcut aici este doar mai mulți gestionari pentru o promisiune. Aceștia nu își transmit rezultatul unul altuia; în schimb îl procesează independent.
7676

7777
Iată imaginea (comparați-o cu înlănțuirea de mai sus):
7878

7979
![](promise-then-many.svg)
8080

81-
Toate `.then` pe aceeași promisiune obțin același rezultat - rezultatul acelei promisiuni. Deci în codul de mai sus toate `alert` arată același: `1`.
81+
Toate `.then` pe aceeași promisiune obțin același rezultat -- rezultatul acelei promisiuni. Deci în codul de mai sus toate `alert` arată același: `1`.
8282

83-
În practică avem rareori nevoie de mai mulți gestionari pentru o promisiune. Înlănțuirea este folosită mult mai des.
83+
În practică avem rareori nevoie de multipli gestionari pentru o promisiune. Înlănțuirea este folosită mult mai des.
8484

8585
## Promisiuni care se întorc
8686

@@ -101,7 +101,7 @@ new Promise(function(resolve, reject) {
101101

102102
*!*
103103
return new Promise((resolve, reject) => { // (*)
104-
setTimeout(() => resolve(rezultat * 2), 1000);
104+
setTimeout(() => resolve(result * 2), 1000);
105105
});
106106
*/!*
107107

@@ -120,9 +120,9 @@ new Promise(function(resolve, reject) {
120120
});
121121
```
122122

123-
Aici primul `.then` arată `1` și returnează `new Promise(…)` în linia `(*)`. După o secundă se rezolvă, iar rezultatul (argumentul lui `resolve`, aici este `result * 2`) este transmis către gestionarul celui de-al doilea `.then`. Acest gestionar se află în linia `(**)`, arată `2` și face același lucru.
123+
Aici primul `.then` arată `1` și returnează `new Promise(…)` în linia `(*)`. După o secundă se rezolvă, iar rezultatul (argumentul lui `resolve`, aici este `result * 2`) este transmis către gestionarul celui de-al doilea `.then`. Acel gestionar se află în linia `(**)`, arată `2` și face același lucru.
124124

125-
Deci, rezultatul este același ca în exemplul anterior: 1 -> 2 -> 4, dar acum cu o întârziere de 1 secundă între apelurile `alert`.
125+
Deci rezultatul este același ca în exemplul anterior: 1 -> 2 -> 4, dar acum cu o întârziere de 1 secundă între apelurile `alert`.
126126

127127
Returnarea promisiunilor ne permite să construim lanțuri de acțiuni asincrone.
128128

@@ -140,7 +140,7 @@ loadScript("/article/promise-chaining/one.js")
140140
})
141141
.then(function(script) {
142142
// utilizează funcțiile declarate în scripturi
143-
// pentru a arăta că acestea au fost într-adevăr încărcate
143+
// pentru a arăta că acestea sunt într-adevăr încărcate
144144
one();
145145
two();
146146
three();
@@ -151,18 +151,18 @@ Acest cod poate fi scurtat puțin cu ajutorul funcțiilor săgeată:
151151

152152
```js run
153153
loadScript("/article/promise-chaining/one.js")
154-
.then(script => loadScript("/articol/promise-chaining/two.js"))
154+
.then(script => loadScript("/article/promise-chaining/two.js"))
155155
.then(script => loadScript("/article/promise-chaining/three.js"))
156156
.then(script => {
157157
// scripturile sunt încărcate, putem folosi funcțiile declarate acolo
158158
one();
159-
două();
160-
trei();
159+
two();
160+
three();
161161
});
162162
```
163163

164164

165-
Aici fiecare apel `loadScript` returnează o promisiune, iar următorul `.then` se execută atunci când se soluționează. Apoi inițiază încărcarea următorului script. Așa că scripturile sunt încărcate unul după altul.
165+
Aici fiecare apel `loadScript` returnează o promisiune, iar următorul `.then` rulează atunci când se soluționează. Apoi inițiază încărcarea următorului script. Așa că scripturile sunt încărcate unul după altul.
166166

167167
Putem adăuga mai multe acțiuni asincrone în lanț. Vă rugăm să rețineți că acest cod este încă "plat" - crește în jos, nu spre dreapta. Nu există semne de "piramida osândei".
168168

@@ -174,8 +174,8 @@ loadScript("/article/promise-chaining/one.js").then(script1 => {
174174
loadScript("/article/promise-chaining/three.js").then(script3 => {
175175
// această funcție are acces la variabilele script1, script2 și script3
176176
one();
177-
doi();
178-
trei();
177+
two();
178+
three();
179179
});
180180
});
181181
});
@@ -193,7 +193,7 @@ Pentru a fi mai precis, un gestionar poate returna nu chiar o promisiune, ci un
193193
194194
Ideea este că bibliotecile terțe pot implementa propriile obiecte "compatibile cu promisiunile". Acestea pot avea un set extins de metode, dar pot fi de asemenea compatibile cu promisiunile native, deoarece implementează `.then`.
195195
196-
Iată un exemplu de obiect "thenable":
196+
Iată un exemplu de obiect thenable:
197197
198198
```js run
199199
class Thenable {
@@ -202,7 +202,7 @@ class Thenable {
202202
}
203203
then(resolve, reject) {
204204
alert(resolve); // function() { cod nativ }
205-
// rezolvă cu this.num*2 după 1 secundă
205+
// resolve cu this.num*2 după 1 secundă
206206
setTimeout(() => resolve(this.num * 2), 1000); // (**)
207207
}
208208
}
@@ -224,7 +224,7 @@ Această caracteristică ne permite să integrăm obiecte personalizate în lan
224224

225225
## Exemplu mai mare: fetch
226226

227-
În programarea frontend, promisiunile sunt adesea folosite pentru network requests. Să vedem deci un exemplu extins în acest sens.
227+
În programarea frontend, promisiunile sunt adesea folosite pentru network requests. Să vedem deci un exemplu extins despre asta.
228228

229229
Vom folosi metoda [fetch](info:fetch) pentru a încărca informațiile despre utilizator de pe remote server. Aceasta are o mulțime de parametri opționali acoperiți în [capitole separate](info:fetch), dar sintaxa de bază este destul de simplă:
230230

@@ -242,7 +242,7 @@ Codul de mai jos face o cerere către `user.json` și încarcă textul acestuia
242242
fetch('/article/promise-chaining/user.json')
243243
// .then de mai jos rulează când remote server răspunde
244244
.then(function(response) {
245-
// response.text() returnează o nouă promisiune care se rezolvă cu textul complet al răspunsului
245+
// response.text() returnează o nouă promisiune care se rezolvă cu întregul response text
246246
// când se încarcă
247247
return response.text();
248248
})
@@ -297,7 +297,7 @@ Așa:
297297

298298
```js run
299299
fetch('/article/promise-chaining/user.json')
300-
.then(spuns => spuns.json())
300+
.then(response => response.json())
301301
.then(user => fetch(`https://api.github.com/users/${user.name}`))
302302
.then(response => response.json())
303303
*!*
@@ -308,7 +308,7 @@ fetch('/article/promise-chaining/user.json')
308308
img.className = "promise-avatar-example";
309309
document.body.append(img);
310310

311-
setTimeout((() => {
311+
setTimeout(() => {
312312
img.remove();
313313
*!*
314314
resolve(githubUser); // (**)
@@ -319,9 +319,9 @@ fetch('/article/promise-chaining/user.json')
319319
.then(githubUser => alert(`A terminat de arătat ${githubUser.name}`));
320320
```
321321

322-
Adică, gestionarul `.then` din linia `(*)` acum returnează `new Promise`, care devine soluționată numai după apelul lui `resolve(githubUser)` în `setTimeout` `(**)`. Următorul `.then` din lanț va aștepta acest lucru.
322+
Adică, gestionarul `.then` din linia `(*)` acum returnează `new Promise`, care devine soluționată numai după apelul lui `resolve(githubUser)` în `setTimeout` `(**)`. Următorul `.then` din lanț va aștepta pentru aceasta.
323323

324-
Ca o bună practică, o acțiune asincronă ar trebui să returneze întotdeauna o promisiune. Acest lucru face posibilă planificarea acțiunilor după ea; chiar dacă nu plănuim să extindem lanțul acum, s-ar putea să avem nevoie de el mai târziu.
324+
Ca o bună practică, o acțiune asincronă ar trebui să returneze întotdeauna o promisiune. Asta face posibilă planificarea acțiunilor după ea; chiar dacă nu plănuim să extindem lanțul acum, s-ar putea să avem nevoie de el mai târziu.
325325

326326
În cele din urmă, putem împărți codul în funcții reutilizabile:
327327

@@ -342,7 +342,7 @@ function showAvatar(githubUser) {
342342
img.className = "promise-avatar-example";
343343
document.body.append(img);
344344

345-
setTimeout((() => {
345+
setTimeout(() => {
346346
img.remove();
347347
resolve(githubUser);
348348
}, 3000);

0 commit comments

Comments
 (0)