|
457 | 457 | ### Недостатки fetch
|
458 | 458 |
|
459 | 459 | - reject только, если происходят ошибки сетевые
|
460 |
| -- Запрос нельзя отменить |
461 |
| -- Нельзя следить за прогрессом, например, загрузки |
| 460 | +- нельзя следить за прогрессом загрузки* |
| 461 | + |
| 462 | + |
| 463 | +\*можно <a href="https://learn.javascript.ru/fetch-progress" target="_blank">за получением данных</a> |
462 | 464 |
|
463 | 465 | ***
|
464 | 466 |
|
|
567 | 569 |
|
568 | 570 |
|
569 | 571 | </script></section>
|
570 |
| -<section data-markdown><script type="text/template"> |
571 |
| - |
572 |
| -## Работа с сервером из React |
573 |
| - |
574 |
| -*** |
575 |
| - |
576 |
| - |
577 |
| -### Где делать запросы? |
578 |
| - |
579 |
| -- Если компоненту нужны данные для того, чтобы отрисоваться? |
580 |
| -- Если компоненту надо после пользовательского события отправить запрос на сервер? |
581 |
| - |
582 |
| - |
583 |
| -*** |
584 |
| - |
585 |
| - |
586 |
| -### Где делать запросы |
587 |
| - |
588 |
| -- Если компоненту нужны данные для того, чтобы отрисоваться? — *В методе жизненного цикла componentDidMount* |
589 |
| -- Если компоненту надо после пользовательского события отправить запрос на сервер? — *В обработчике события* |
590 |
| - |
591 |
| - |
592 |
| -*** |
593 |
| - |
594 |
| - |
595 |
| -### Практика |
596 |
| - |
597 |
| -1. Перейди в директорию `tasks/react` |
598 |
| -2. Выполни команду `npm i` |
599 |
| -3. После установки зависимостей выполни команду `npm start` |
600 |
| -4. Открой отдельное окно терминала и выполни команду `npm run server` (из этой же директории) |
601 |
| -5. В файле `src/App/index.js` написаны условия задачи, выполни их! |
602 | 572 |
|
603 |
| - |
604 |
| -</script></section> |
605 | 573 | <section data-markdown><script type="text/template">
|
606 | 574 |
|
607 |
| - |
608 | 575 | ## Advanced Promises
|
609 | 576 |
|
610 | 577 | ***
|
611 | 578 |
|
612 | 579 | ### Promise.race — когда выполнится хоть один промис
|
613 | 580 |
|
614 | 581 | ```js
|
615 |
| -var promise1 = new Promise(function(resolve, reject) { |
616 |
| -setTimeout(resolve, 500, 'one'); |
617 |
| -}); |
| 582 | +let promise1 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'one')); |
618 | 583 |
|
619 |
| -var promise2 = new Promise(function(resolve, reject) { |
620 |
| -setTimeout(resolve, 100, 'two'); |
621 |
| -}); |
| 584 | +let promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'two')); |
| 585 | +
|
| 586 | +Promise.race([promise1, promise2]) |
| 587 | + .then(value => console.log(value)); // 'two' |
622 | 588 |
|
623 |
| -Promise.race([promise1, promise2]).then(function(value) { |
624 |
| -console.log(value); // 'two' |
625 |
| -}); |
626 | 589 | ```
|
627 | 590 | [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race)
|
628 | 591 |
|
|
632 | 595 | ### Promise.all — когда выполнятся все промисы
|
633 | 596 |
|
634 | 597 | ```js
|
635 |
| -var promise1 = Promise.resolve(3); |
636 |
| -var promise2 = 42; |
637 |
| -var promise3 = new Promise(function(resolve, reject) { |
638 |
| - setTimeout(resolve, 100, 'foo'); |
639 |
| -}); |
| 598 | +let promise1 = Promise.resolve(3); |
| 599 | +let promise2 = 42; |
| 600 | +let promise3 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'foo')); |
640 | 601 |
|
641 | 602 | Promise.all([promise1, promise2, promise3])
|
642 |
| -.then(values => console.log(values)); |
643 |
| -
|
| 603 | + .then(values => console.log(values)); // [3, 42, 'foo'] |
644 | 604 | ```
|
645 | 605 |
|
646 | 606 | ```js
|
|
651 | 611 |
|
652 | 612 | ***
|
653 | 613 |
|
654 |
| - |
655 | 614 | ### Promise.allSettled — когда все промисы выполнятся или отклонятся
|
656 | 615 |
|
657 | 616 | ```js
|
658 |
| -var promise1 = Promise.reject(3); |
659 |
| -var promise2 = 42; |
| 617 | +let promise1 = Promise.reject(3); |
| 618 | +let promise2 = 42; |
660 | 619 |
|
661 | 620 | Promise.allSettled([promise1, promise2])
|
662 |
| -.then(values => console.log(values)); |
| 621 | + .then(values => console.log(values)); |
| 622 | +/* [ |
| 623 | + {"status": "rejected", "reason": 3}, |
| 624 | + {"status": "fulfilled", "value": 42} |
| 625 | + ] |
| 626 | +*/ |
663 | 627 |
|
664 | 628 | ```
|
665 | 629 |
|
|
684 | 648 |
|
685 | 649 | ### Задачка
|
686 | 650 |
|
687 |
| -Почти все наши запросы можно делать параллельно. Перепиши функцию `run`, чтобы она использовала Promise.all. |
| 651 | +Почти все наши запросы можно делать параллельно. Перепиши функцию `run`, чтобы она использовала `Promise.all`. |
688 | 652 |
|
689 | 653 | <img src="assets/parallel-requests.png" alt="parallel requests in devTools">
|
690 | 654 |
|
|
699 | 663 |
|
700 | 664 | ## [Интерактивная статья о микротасках](https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/)
|
701 | 665 |
|
| 666 | +</script></section> |
| 667 | + |
| 668 | +<section data-markdown><script type="text/template"> |
| 669 | + |
| 670 | +## Работа с сервером из React |
| 671 | + |
| 672 | +*** |
| 673 | + |
| 674 | + |
| 675 | +### Где делать запросы? |
| 676 | + |
| 677 | +- Если компоненту нужны данные для того, чтобы отрисоваться? |
| 678 | +- Если компоненту надо после пользовательского события отправить запрос на сервер? |
| 679 | + |
| 680 | + |
| 681 | +*** |
| 682 | + |
| 683 | + |
| 684 | +### Где делать запросы |
| 685 | + |
| 686 | +- Если компоненту нужны данные для того, чтобы отрисоваться? — *В методе жизненного цикла componentDidMount или в useEffect* |
| 687 | +- Если компоненту надо после пользовательского события отправить запрос на сервер? — *В обработчике события* |
| 688 | + |
| 689 | + |
| 690 | +*** |
| 691 | + |
| 692 | + |
| 693 | +### Практика |
| 694 | + |
| 695 | +1. Перейди в директорию `tasks/react` |
| 696 | +2. Выполни команду `npm i` |
| 697 | +3. После установки зависимостей выполни команду `npm start` |
| 698 | +4. Открой отдельное окно терминала и выполни команду `npm run server` (из этой же директории) |
| 699 | +5. В файле `src/App/index.js` написаны условия задачи, выполни их! |
| 700 | + |
702 | 701 |
|
703 | 702 | </script></section>
|
704 | 703 | <section data-markdown><script type="text/template">
|
|
0 commit comments