[JS]コールバック
11659 ワード
変更
8/19:callback選手の知識-動機と非同期を追加
8/19:コールバック、高次関数定義の追加
コールバック関数を理解する前に、同期と非同期とは何かを理解する必要があります.
コールバック関数は非同期処理のモードです.
同期(Synchronouse)は、コードが順番に実行されることを示します.
現在の操作が完了すると、次のコードが実行されます.
これは私たちが知っているプログラミングプロセスです.
各コードが1つ実行されるため、コードの実行順序を確認します.
ただし、次の操作は、操作が完了するまで停止します.これをブロック(blocking)と呼ぶ.
実行中のコードが完了していない場合、非同期は次のコードに移動します.
非同期(通常は時間がかかる)タスクをブラウザに渡し、次のコードに移動します.
実行順序は保証されませんが、ブロックを防止できます.
JavaScriptは一度に1つのことしか処理しない単一スレッドです.
ただし、写真をロードするときは、ユーザーの入力を処理するなどのタスクを実行する必要があります.
これが非同期処理が必要な理由です.
コールバック関数とは、パラメータとして受信される関数をコールバック関数と呼ぶ.
パラメータとして関数を受け入れる関数を高次関数とも呼ぶ.
高次関数では、必要に応じてコールバック関数を実行して非同期を処理します.
スクリプトを取得する関数
ロード後、スクリプトを使用する必要があります.
ただし、
この問題を解決するために、コールバック関数を
この方式をコールバックベースの非同期プログラミングと呼ぶ.
関数を処理して実行する必要がある引数を指定します.
これまで、スクリプトのロード中にエラーが発生したことは考慮されていません.
これらの操作はよくエラーが発生し、処理できる必要があります.
失敗すると、
次に、2つのスクリプトを読み込みます.
2番目のスクリプトは、1番目のスクリプトのロード後にロードされます.
しかし、オーバーラップが発生します.
3番目または4番目のスクリプトをロードしようとすると、ネストはさらに深刻になります.
後続の非同期運動が増えるにつれて,重なりが深まる.
.
.
非同期呼び出しが重なり続け、コードが深くなります.
中間に条件文や重複文があると、さらに見えにくくなります.
これらのオーバーラップコードによって生成されたパターンを破壊ピラミッドと呼ぶ.
現在、これらの問題はES 6に続く
8/19:callback選手の知識-動機と非同期を追加
8/19:コールバック、高次関数定義の追加
同期と非同期
コールバック関数を理解する前に、同期と非同期とは何かを理解する必要があります.
コールバック関数は非同期処理のモードです.
動機。
同期(Synchronouse)は、コードが順番に実行されることを示します.
現在の操作が完了すると、次のコードが実行されます.
これは私たちが知っているプログラミングプロセスです.
各コードが1つ実行されるため、コードの実行順序を確認します.
ただし、次の操作は、操作が完了するまで停止します.これをブロック(blocking)と呼ぶ.
非同期
実行中のコードが完了していない場合、非同期は次のコードに移動します.
非同期(通常は時間がかかる)タスクをブラウザに渡し、次のコードに移動します.
実行順序は保証されませんが、ブロックを防止できます.
JavaScriptは一度に1つのことしか処理しない単一スレッドです.
ただし、写真をロードするときは、ユーザーの入力を処理するなどのタスクを実行する必要があります.
これが非同期処理が必要な理由です.
コールバック関数とは
コールバック関数とは、パラメータとして受信される関数をコールバック関数と呼ぶ.
パラメータとして関数を受け入れる関数を高次関数とも呼ぶ.
高次関数では、必要に応じてコールバック関数を実行して非同期を処理します.
コールバックによる非同期処理
スクリプトを取得する関数
loadScript(src)
.function loadScript(src) {
let script = document.createElement('script');
script.src = src;
document.head.append(script);
}
loadScript
を実行し、実行関数でロードされたスクリプトを使用したいです.ロード後、スクリプトを使用する必要があります.
ただし、
loadScript
以降のコードは関数のロードを待つことはありません.loadScript('./src.js');
func(); // src내의 함수 func() : 존재하지 않는 함수 에러
これにより、ロード後に実行するコードにエラーが発生します.この問題を解決するために、コールバック関数を
loadScript
に2番目のパラメータとして追加します.function loadScript(src,callback) {
let script = document.creatElement('script');
script.src = src;
script.onload = () => callback(script); // *
document.head.append(script);
}
//호출
loadScript('./src.js', script => {
alert(`${script.src}가 로드됨`);
func() // 사용가능
})
script
がロードされた後、コールバック関数呼び出しが記述される.この方式をコールバックベースの非同期プログラミングと呼ぶ.
関数を処理して実行する必要がある引数を指定します.
コールバックエラーハンドル
これまで、スクリプトのロード中にエラーが発生したことは考慮されていません.
これらの操作はよくエラーが発生し、処理できる必要があります.
loadScript(src,callback) {
let script = document.createElement('script');
script.src = src;
script.onload = callback(null, script); // *
script.onerror = callback(new Error(`${src}를 불러오는 도중 에러가 발생했습니다.`)); // **
document.head.append(script);
}
ロードに成功すると、失敗すると、
callback(null,sciprt)
が呼び出されます.callback(new Error(...))
が呼び出されます.loadScript(src, (err,script)=>{
if(err) {
//error 처리
return;
}
// 스크립트 로딩이 성공적일 때 코드
})
コールバック関数の最初のパラメータでは、エラーオブジェクトを含むモードをエラー優先コールバックと呼びます.ネストコールバック
次に、2つのスクリプトを読み込みます.
2番目のスクリプトは、1番目のスクリプトのロード後にロードされます.
loadScript(src1, script=> {
alert(`${script.src}로딩 완료`);
loadScript(src2, script=> {
alert(`${script.src}로딩 완료`);
})
})
最初の関数のコールバック関数で、関数を再度呼び出します.しかし、オーバーラップが発生します.
3番目または4番目のスクリプトをロードしようとすると、ネストはさらに深刻になります.
破滅のピラミッド
後続の非同期運動が増えるにつれて,重なりが深まる.
loadScript
を実行し、スクリプトをロードします.エラーがなければ、func1
を実行し、スクリプトをロードします.エラーがなければ、func2
を実行し、スクリプトをロードします.エラーがなければ、func3
を実行し、スクリプトをロードします.エラーがなければ、.
.
非同期呼び出しが重なり続け、コードが深くなります.
中間に条件文や重複文があると、さらに見えにくくなります.
これらのオーバーラップコードによって生成されたパターンを破壊ピラミッドと呼ぶ.
現在、これらの問題はES 6に続く
func4
によって解決されている.Reference
この問題について([JS]コールバック), 我々は、より多くの情報をここで見つけました https://velog.io/@hanganda23/JS-콜백テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol