PROMISE
記述方法
// const instance=new Promise(asyncHandler); <= new Promiseのコーバック関数内で非同期処理を行う
// function asyncHandler(resolve, reject) { <= resolve,reject の2つの引数が渡されてくる
// setTimeout(() => {
// if (非同期処理が成功 ?) {
// resolve(data); <= 成功の場合、thenの処理(引数data)
// } else {
// reject(error); <= 失敗の場合、catchの処理(引数error)
// }
// });
// }
new Promise((resolve, reject) => {
setTimeout(() => {
const sec = new Date().getSeconds();
if (sec % 2 === 0) {
resolve(sec);
} else {
reject(sec);
}
}, 1000);
}).then((sec) => {
console.log(`${sec}は偶数です`)
}).catch((sec) => {
console.log(`${sec}は奇数です`)
}).finally(() => {
console.log(`終了します`)
})
Promiseチェーン記述方法
const Promiseインスタンス1 = new Promise(...);
const Promiseインスタンス2 = new Promise(...);
const Promiseインスタンス3 = new Promise(...);
Promiseインスタンス1
// thenのコールバック関数のreturnにPromiseインスタンスを渡す
.then(data1 => { return Promiseインスタンス2; })
.then(data2 => { return Promiseインスタンス2; })
.catch(error => { エラー発生時の処理 })
.finally(() => { 終了時の処理 });
function promiseFactory(count) {
return new Promise((resolve, reject) => {
setTimeout(() => {
count++;
console.log('COUNT:', count);
if (count < 3) {
resolve(count);
} else {
reject(count);
}
}, 1000);
});
}
promiseFactory(0)
.then(count => { return promiseFactory(count); })
.then(count => { return promiseFactory(count); })
.then(count => { return promiseFactory(count); })
.then(count => { return promiseFactory(count); })
.catch(count => { console.log('CATCH(error):', count) })
.finally(() => { console.log('FINALLY') });
async function wrapPromise() {
try {
let count = await promiseFactory(0)
count = await promiseFactory(count)
count = await promiseFactory(count)
count = await promiseFactory(count)
count = await promiseFactory(count)
} catch (error) {
console.log('CATCH(error):', error)
}
}
wrapPromise();