今までなんとなくその場しのぎで理解していたAsynchronous Operationについて、備忘メモ的にまとめようと思う。
昔のJSでは、以下の様に .then() Callbackを使ってPromise Chainを書いていたが、これだと延々と.thenが続いてクリスマスツリーの様だ(アメリカではそう表現されてます)とのことで、async/awaitが今では主流だと教わっていました。
const promise = xxx_func()
promise.then(() =>{
...
}
しかしです。よくよく考えたら、Promiseを返さないFunctionもあるわけで、その場合にはPromise Chainがそこで分断されてしまいます。
そんな時は、このように、Promisifyすることで、Chainの一貫性を保つことができます。
await new Promise((resolve, reject) => {
xxx.dosomething(error => {
if(error){
reject(error)
} else {
resolve()
}
});
})
そういったメソッドが複数ある場合には、promises arrayに追加して、Promise.all(promises)で一気にまとめるのもいいと思います。
let promises = [];
for (let i = 0; i < 5; i++) {
promises.push(doAsyncWork(i));
}
// Execute all promises
Promise.all(promises)
.then(results => {
console.log("All promises resolved:", results);
})
.catch(error => {
console.log("One or more promises rejected:", error);
});
覚える必要がないのはわかってますが、Syntaxを忘れがち&そもそもこのロジックを忘れがちなので、備忘録書かせていただきました。