次の機能があるとします。
var f1 = function() {
console.log('running f1');
return new Promise(function(res, rej) {
setTimeout(() => res('resolved_1!'), 1000);
});
};
var f2 = function(a) {
console.log('running f2 with ' + a);
return new Promise(function(res, rej) {
setTimeout(() => res('resolved_2!'), 2000);
});
};
var f3 = function() {
console.log('running f3');
return new Promise(function(res, rej) {
setTimeout(() => res('resolved_3!'), 3000);
});
};
私はそれらを実行できます:
let t1 = +new Date;
Promise.all([
f1().then(a => {
return f2(a);
}),
f3()
]).then((result) => {
let t2 = +new Date;
console.log(t2 - t1);
});
そして、約3秒かかります。
ここで、ジェネレーターを使用してこれらの関数を実行したいと思います。
let t1 = +new Date;
let result = yield [f1(), f3()];
yield f2(result[0]);
let t2 = +new Date;
console.log(t2 - t1)
f2 を呼び出すには f1 の解決済みの値が必要なので、f1 が完了するまで待ちます。これには 5 秒かかります。同じ 3 秒を取得するにはどうすればよいですか?ただし、ジェネレーターを使用していますか?