このページの以降のコードで使う共通コードです。
const timer = (time, type) => { return new Promise((resolve, reject) => { setTimeout(() => { if (type === 'resolve') { resolve(`${time} 解決`); } if (type === 'reject') { reject(`${time} 拒否`); } }, time); }); };
「Promise.all」の解決の例です。
Promise.all([ 500, timer(600, 'resolve'), timer(700, 'resolve'), timer(800, 'resolve') ]) .then( val => console.log('○', val), val => console.log('×', val) );
○ [500, '600 解決', '700 解決', '800 解決']
「Promise.all」の拒否の例です。
Promise.all([ 500, timer(600, 'resolve'), timer(700, 'reject'), timer(800, 'reject') ]) .then( val => console.log('○', val), val => console.log('×', val) );
× 700 拒否
「Promise.allSettled」の例です。
Promise.allSettled([ 500, timer(600, 'resolve'), timer(700, 'reject'), timer(800, 'reject') ]) .then( val => console.log('○', val), val => console.log('×', val) );
○ [ {"status": "fulfilled", "value": 500}, {"status": "fulfilled", "value": "600 解決"}, {"status": "rejected", "reason": "700 拒否"}, {"status": "rejected", "reason": "800 拒否"} ]
「Promise.any」の解決の例です。最初に解決するのは、何も待たない「800」になります。
Promise.any([ timer(500, 'reject'), timer(600, 'resolve'), timer(700, 'resolve'), 800 ]) .then( val => console.log('○', val), val => console.log('×', val) );
○ 800
「Promise.any」の拒否の例です。全て拒否の場合です。
Promise.any([ timer(500, 'reject'), timer(600, 'reject'), timer(700, 'reject'), timer(800, 'reject') ]) .then( val => console.log('○', val), val => console.log('×', val) );
× AggregateError: All promises were rejected
「Promise.race」の解決の例です。
Promise.race([ timer(500, 'resolve'), timer(600, 'reject') ]) .then( val => console.log('○', val), val => console.log('×', val) );
○ 500 解決
「Promise.race」の拒否の例です。
Promise.race([ timer(600, 'resolve'), timer(500, 'reject') ]) .then( val => console.log('○', val), val => console.log('×', val) );
× 500 拒否