Учебник Дорожная карта
Функции генератора и итераторы?
Использование в асинхронном программировании (вызов API)
Функции генератора и итераторы
Генераторная функция — это функция, которая позволяет нам контролировать выполнение операторов в ней. то есть можно остановиться на полпути и продолжить с того места, где он ушел.
Ага! Мы можем извлекать любые значения из функции в любое время, используя yeild
, и, что более удивительно, мы также можем передавать некоторые значения в функцию во время ее выполнения.
yeild ‘Anything’ // returns anything and pauses
Это управление потоком операторов стало возможным благодаря объектам итераторов.
Чтобы выразить Iterators на простом английском языке, это
Процесс зацикливания пользовательских объектов.
Хорошо, давайте посмотрим вышеприведенную теорию в действии
//Normal JS Function function myName(){ //Statements return 'Danish Ali'; return 'Unreachable statement'; } const Name = myName(); console.log(Name) // Danish Ali
Это нормальная работа функции в JS. Она работает до конца, следуя модели запуска до завершения.
//This is generator function in work function* myNameGenerator(){ yeild ‘My’ yeild ‘Name is’ yeild ‘Danish’ return ‘Ali’ } const nameGenerator = myNameGenerator console.log(nameGenerator) //{[Iterator]} console.log(nameGenerator.next()) // {value:’My’, done: false}
Да, функция-генератор возвращает итератор (объект)
Итератор имеет метод next
next() возвращает объект
`{value: Any, done: true | false}`
значение является следующим значением от генератора и готово сообщает нам, способна ли функция генератора генерировать больше значений. т. е. когда done истинно, больше не нужно генерировать значения.
//Continuing previous code... console.log(nameGenerator.next()) // {value:'Name is', done: false} console.log(nameGenerator.next()) // {value:'Danish', done: false} console.log(nameGenerator.next()) // {value:'Ali', done: true}
При возврате оператору done присваивается значение true, после чего генераторы больше не могут генерировать.
Использование в асинхронном программировании (вызов API)
Redux Saga Промежуточное ПО для Redux разработано с использованием функциональности, предлагаемой генераторами для достижения асинхронности.
Example of Login Api by using Generators used in redux saga
function* loginRequest(obj) { //console.log('loginRequest Generator Function Called'); const response = yield anyRequestFunction(data, 'Url'); //console.log('Login Request Working', response); if (response.status === 200) { yield put(loginSuccess(response)); } else if (response.status === 400) { yield put(loginFaliure(response)); } else { yield put(loginFaliure(response)); } }
Здесь, когда вызывается API, он приостанавливается и выполняется в фоновом режиме, в то время как управление передается следующему оператору после вызова генератора.
Спасибо, что дочитали до конца, надеюсь, это было полезно для вас.
Удачного кодирования :)
Полезные ссылки