[TIL 11]非同期タスクの約束


Promise...


実はasync/awaitが出てきたのでpromiseの感じを無視しました...実は、私が非同期の仕事をしていたときも、急いでasync、waitを勉強していたようです.ははは
しかしpromiseは非同期操作で理解しなければならない概念である.これはasync/awaitの原理と同じだからです!
これを知ってこそ、async/awaitの構造を正確に知ることができる.

Promiseとは?


promiseは、非同期操作を制御するために提案された概念であり、callback hellからある程度抜け出すのに役立ちます.
promiseとして定義されたジョブ間で接続できるため、コードの深さが増加しません.

resolve, reject


promise内部では、非同期の終了時にresolve関数が呼び出されます.
逆に、エラーが発生した場合は、拒否関数が呼び出されます.
const promise = new Promise((resolve, reject) => {
    // promise 내부에서 비동기 상황이 종료될 때, resolve 함수 호출
    // promise 내부에서 오류 상황일 때, reject 함수 호출
})
function asyncPromiseWork(){
    // code...
    return new Promise((resolve, reject) => {
        // code....
        return resolve('complete')
    })// promise를 리턴하는 함수 => 실행하고 .then으로 정상적으로 
  //종료될 때 이후 작업을 지정한다. 
}

asyncPromiseWork().then(result => console.log(result))
promiseはthenを使用して非同期操作の後に実行する操作を指定します.
promiseWork()
.then(result=> {return promiseNextWork(result)
}).then(result => {return promiseFinalWork(result)
}).then(result => {return promiseFinalWork(result)
})
確かにコールバックより毒性が高い.😊
Promise chainで操作に失敗した場合は、catchを使用してキャプチャできます.
promiseWork()
.then(result=> { 
    return promiseNextWork(result)
}).then(result => {
    return promiseFinalWork(result)
}).then(result => {
    return promiseFinalWork(result)
}).catch(e=>{
    alert('에러 발생')!
})
catchを真ん中に置いて、後続のタスクに接続しても操作できます.
catchを入れないとpromise chainでエラーが発生した場合はchainが止まるのでなるべく入れたほうがいいです.
また、間違いは原因を見つけるのが難しいことが多い.

finally


成功するかどうかにかかわらず、呼び出すコードがある場合はfinallyで処理します.
promiseWork()
.then(result=> { 
    return promiseNextWork(result)
}).then(result => {
    return promiseFinalWork(result)
}).then(result => {
    return promiseFinalWork(result)
}).catch(e=>{
    alert('에러 발생')
}).finally(() => {
    alert('작업 끝')
})
既存のコールバック関数をpromise形式にすることができます.

promiseの組み込み関数


Promise.all(iterable)
複数の承諾を同時に処理する場合に役立ちます.
const promise1 = delay(1000);
const promise2 = delay(1000);
const promise3 = delay(1000);

Promise.all([promise1, promise2, promise13]).then(() => {})
一気に処理しました!(順次同時多発!)
上のコードは1秒で終わります!
Promise.race(iterable)
複数の承諾のうちの1つでも、吸収されたり拒否されたりすると、終了します.
Promise.any(iterable)
多くの約束の一つでも、解決されれば終わります.
Promise.allSettled(iterable)
約束が成功しても失敗しても、実現の状況を処理することができます.
成功しようが失敗しようが、やってから処理する.
保留中/解決(完了)
Promise.resolve
指定された値がPromiseの場合、対応するPromiseが返されます.すなわち,promis解析処理のpromis thenオブジェクトを作成する.
これの用途は…?
関数のreturn typeだから!
返さなければならない関数があり、条件に基づいて値を直接エクスポートする必要がある場合があります.この場合return typeは正しくないため,これらの事項に比べて無条件にreturn値をpromiseの用途に導出する.
キャッシュに値がある場合はpromiseを書く必要はありませんが、return typeが調整されるため、promiseオブジェクトとしてカプセル化されます.
Promise.reject
所定の値で処理を拒否するPromise.次にオブジェクトを作成します.