Created
April 9, 2017 19:02
-
-
Save Yuriy1988/a114185aabf2dd95d5bc13165a1c98fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //promises | |
| var p = new Promise((resolve, reject) => { | |
| resolve(1); | |
| }) | |
| p.then( | |
| success => { console.log(success) }, | |
| fail => { console.log(fail) | |
| }); | |
| // промисы - специальные объекты, которые содержат свое состояние, сначала состояние pending, после выполения асинхронной операции, fulfilled, rejected | |
| // методы then, catch, all | |
| // iterators | |
| /* | |
| генераторы - новый вид функций. | |
| они могут приостанавливать свое выполнение, возвращать промежуточный результат, и возобновлять свое выполенение в нужный момент времени | |
| генераторы удобно использовать с промисами, получается легко читаемый код. | |
| создвем ф-ю, объявляем ее со * | |
| далее сохраняем вызов функции в переменнуюпо этой переменной можно итерироваться с помощью next | |
| в генератор при помощи next можно передать значение | |
| */ | |
| function* generator() { | |
| try { | |
| const post = yield fetch('https://jsonplaceholder.typicode.com/posts/6'); | |
| const title = yield post.json().title; | |
| return title; | |
| } catch(e) { | |
| console.log(e); | |
| } | |
| } | |
| function execute(gen, yieldValue) { | |
| let next = gen.next(yieldValue); | |
| if (!next.done) { | |
| next.value.then( | |
| result => execute(gen, result), | |
| err => gen.throw(err) | |
| ) | |
| } else { | |
| return next.value; | |
| } | |
| } | |
| /* | |
| async/await; | |
| async - функция, которая возвращает промис | |
| await тоже возвращает промис | |
| */ | |
| async function test() { | |
| const post = await fetch('https://jsonplaceholder.typicode.com/posts/6'); | |
| const title = await post.then(res => res.json()).title; | |
| } | |
| async function test2() { | |
| let a = () => {}; | |
| return a; | |
| } | |
| var itareble = { | |
| [Symbol.iterator]() { | |
| let val = 1; | |
| return { | |
| next() { | |
| let value = val > 10 ? undefined : val++; | |
| let done = !value; | |
| return { done, value } | |
| } | |
| } | |
| } | |
| } | |
| // итератор - это объект, который позволяет итерироваться по другому объекту | |
| // добавляется с помощью [Symbol.iterator]() | |
| // этот метод должен возвращать объект, у которого есть метод next() | |
| // а метод next должен возвращать объект с ключами done, value; | |
| var a = { | |
| size: { | |
| test: 1, | |
| test2: 2, | |
| } | |
| } | |
| var { size: { test, test2 }} = a; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment