19.ジェネレータ
1343 ワード
生成器
javascript
の関数は、すべて上から下まで順次実行され、終了するまで、ジェネレータの関数は、実行中に開始、一時停止され、その後の呼び出しで別のパラメータを入力することができる.// `*`
function* listColors() {
console.log('test');
// `yield` `return` , `ruturn`
yield 'red';
yield 'blue';
yield 'green';
}
// `console.log('test')` `next`
const colors = listColors();
// `next()` , `yield`
colors.next(); // {value: "red", done: false}
colors.next(); // {value: "blue", done: false}
colors.next(); // {value: "green", done: false}
colors.next(); // {value: undefined, done: true}
適用// `Generator` `ajax`
function ajax(url) {
axios.get(url).then(res => userGen.next(res.data));
}
function* steps() {
console.log('fetching users');
const users = yield ajax('https://api.github.com/users');
console.log(users);
console.log('fetching firstUser');
const firstUser = yield ajax(`https://api.github.com/users/${users[0].login}`);
console.log(firstUser);
console.log('fetching followers');
const followers = yield ajax(firstUser.followers_url);
console.log(followers);
}
const userGen = steps();
userGen.next();