Pull to refresh

Comments 14

Спасибо за пояснения. Генераторов нет — и это хорошо.
Это вы на генераторах написали монаду Maybe. Но у старшеклассников есть ещё много других разных монад, и когда им становится скучно, они делают то же что и вы в статье, но в более общей форме. Например, как сделал Tom Crockett в своём burrido
мне генераторы больше в таком вот приложении понравились

function sleep(n) {return new Promise(resolve=>setTimeout(resolve, n))}

async function* count(n=0) {while (true) {await sleep(100);yield n++}}

const iter = count(0);
await Promise.all(
  Array(10).fill().map(async ()=>(await iter.next()).value)
); // [0, 1, ,2 ,3, 4, 5, 6, 7, 8, 9]

а зачем столько async/await? вот тот же код работает так же…
function* count(n=0) {while (true) {setTimeout(undefined,100);yield n++}}

const iter = count(0);
await Promise.all(
  Array(10).fill().map(()=>(iter.next()).value)
); //(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

или чего-то недопонимаю?

Сорри за поздний ответ, в вашем примере setTimeout сам по себе, а yield, сам по себе (setTimeout != sleep), т.е. yield выполнится без ожидания. На самом деле я привел этот пример как обращение с api - частый случай, типа докачка данных, и всегда асинхронное.

Как правильно вы заметили здесь setTimeout сам по себе он не участник, даже без него, был бы тот же вопрос: «а зачем столько async/await? вот тот же код работает так же…?»

Так для того же и await, чтоб подождать промиса... Не так же работает код. Представьте вместо sleep() fetch()

зачем ожидать промис если у вас далее идёт Promise.all который за вас будет ожидать окончание всех промисов. Тут видимо очень НЕ удачный пример для примера :) Потому что даже если поставлю fetch что изменится? НИЧЕГО. Или я ошибаюсь?

Затем, что это последовательное, а не паралельное обращение, ваш первый пример работает не так же. Блин тут неудобно дискутировать, я раз в сто лет вижу сообщения, мне кажется вы просто по другому видите пример. Идея в том, чтобы абстрагировать апи с докачкой например от кода, т.е. сделать генератор, который будет просто возвращать next значение, Promise.all - снаружи штука,

Sign up to leave a comment.