Add repeatGenerator
This commit is contained in:
27
snippets/repeatGenerator.md
Normal file
27
snippets/repeatGenerator.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
title: repeatGenerator
|
||||||
|
tags: function,generator,advanced
|
||||||
|
---
|
||||||
|
|
||||||
|
Creates a generator, repeating the given value indefinitely.
|
||||||
|
|
||||||
|
- Use a non-terminating `while` loop, that will `yield` a value every time `Generator.prototype.next()` is called.
|
||||||
|
- Use the return value of the `yield` statement to update the returned value if the passed value is not `undefined`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const repeatGenerator = function* (val) {
|
||||||
|
let v = val;
|
||||||
|
while (true) {
|
||||||
|
let newV = yield v;
|
||||||
|
if (newV !== undefined) v = newV;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const repeater = repeatGenerator(5);
|
||||||
|
repeater.next(); // { value: 5, done: false }
|
||||||
|
repeater.next(); // { value: 5, done: false }
|
||||||
|
repeater.next(4); // { value: 4, done: false }
|
||||||
|
repeater.next(); // { value: 4, done: false }
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user