非同期処理
2479 ワード
非同期関数とは?JavaScriptはシングルスレッドなので、一度に1つのタスクしか実行できません.この問題を解決するために、非同期が発生した.非同期とは、特定のコードの処理が完了する前に、次のコードを実行できます.
ダイヤルバックも2種類ございます
インスタント同期のための同期コールバックはいつ実行するか分かりません
function printWithDelay(print, timeout){
setTimeout(print, timeout);
}
関数宣言は実は一番上です!
await
このように逐次漸進して、3+3になって、効率がありません
遅延が異なると仮定してapple-1秒/バナナ2秒
console.log('1')
setTimeout(()=> console.log('2'), 1000) // 나중에(1초) 불러주는 callback함수
console.log('3')
コールバックは常に非同期にのみ使用されますか?ダイヤルバックも2種類ございます
インスタント同期のための同期コールバック
function printImmediately(print){ //print라는 콜백을 받는다
print()
}
printImmediately(()=> console.log('hello'))
Asynchronous callback function printWithDelay(print, timeout){
setTimeout(print, timeout);
}
printWithDelay(()=>console.log('aysnc callback'), 2000)
>> console.log('aysnc callback')이 2초뒤 실행
すべての関数の宣言がハイライトされます.function printWithDelay(print, timeout){
setTimeout(print, timeout);
}
関数宣言は実は一番上です!
await
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
async fuction getApple() {
await delay(3000) // 3초뒤에 apple 반환
return 'apple'
}
async fuction banana() {
await delay(3000) // 3초뒤에 banana 반환
return 'banana'
}
// 콜백지옥의 향기가 솔솔난다
function pickFruit(){
return getApple()
.then(apple => {
return getBanana()
.then(banana => `${apple} + ${banana}`)
})
}
pickFruit().then(console.log)
async、awaitを使用して簡略化このように逐次漸進して、3+3になって、効率がありません
async function pickFruit(){
try {
const apple = await getApple()
const banana = await getBanana()
} catch(){ //에러처리
console.log(error)
}
return `${apple} + ${banana}`
}
効率化:並列処理待ちasync function pickFruit(){
const applePromise = getApple() //콜백끼리 서로 관계가 없을경우 가능
const bananaPromise = getBanana()
const apple = await applePromise()
const banana = await bananaPromise()
return `${apple} + ${banana}`
}
上のコードをもっと簡潔にしますfunction pickAllFruits () {
return Promise.all([getApple(), getBanana()])
.then(fruit => fruit.join(' + '))
}
pickAllFruit().then(console.log)
// apple + banana 출력
最初に実行した値を取得したい場合は?遅延が異なると仮定してapple-1秒/バナナ2秒
function pickOnlyOne() {
return Promise.race([getApple, getBanana])
}
pickOnlyOne().then(console.log)
// apple만 출력된다
Reference
この問題について(非同期処理), 我々は、より多くの情報をここで見つけました https://velog.io/@dbfudgudals/비동기-프로그래밍テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol