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();