TIL. Promise


promiseについて曖昧な理解があり,fetch構文を用い,さらにasyncwait,axoisを用いた.
async awaitを使うときは、使い方よりも、どのように働いているのかを根本的に知るべきだと思います.

同期/非同期


まずjavascriptは同期(synchronous)処理を行う.
だから.
<script>
  console.log('a'); 
  console.log('b'); 
  console.log('c');
</script>
そうすると順番に実行されます.
非同期処理の方法もあり、settimeout関数を代表的に使用します.
<script>
  console.log('a');
  setTimeout(function(){}, 2000);
  console.log('c');
</script>
このようにして実行すると、順番に実行されないsettimeout関数は2秒後に実行されるので、先に別の関数が実行され、settimeout後の2秒以内に実行されます.
実行を保留し、先に処理できる関数を優先します.
いくつかの関数はこのように外すことができます.
settimeout、addEventListener、ajax関連関数の実行点と動作点が異なります.
すなわち,動作に時間がかかり,一時的にWebAPIに放置される.
WebapiはJavaScriptの内蔵機能ではなく、ブラウザ機能です.
従って、非同期処理を行うことができる.

コールバック関数


コールバック関数は次のとおりです.
関数の関数をコールバック関数と呼びます.
非同期処理で関数を順次実行する場合は、コールバック関数を使用します.
2つの関数を順次実行したい場合は?
function first () {
	console.log("이것은 첫번째 함수")
}

function second () {
	console.log("이것은 두번째 함수")
}

first()
second()
これで順次実行されますか???
答えはそうではありません.非同期運転の特殊性のため、このように書くのは順次運転できません.
コールバック関数を呼び出してこそ、順次実行できます.
function first (callback) {
	console.log("이것은 첫번째 함수");
  	callback()
}

function second () {
	console.log("이것은 두번째 함수")
}

first(second)
これにより、1番目の関数のみが実行され、2番目の関数が実行されます.
コールバック関数を直接入力することもできます.ただし、コードは右に延長される可能性があります.
そうすると可読性が低下するのでPromiseを使います.

Promise


promiseは、非同期処理の場合に関数を順次実行し、コードの可読性を向上させることができる.しかし、これはコードが同期を非同期にすることを意味するものではありません.これは設計モードにすぎません.通常は同期コードが実行されますが、特殊な関数のために非同期で実行されます.
使用方法:
let promise = new Promise()

promise.then().catch()
コールバック関数よりも良いことを約束したのは、コードが長くなったり汚くなったりしないためです.
すなわち,可読性が良く,コールバック関数が実行されていない場合には(?)に対応する.可能性があります.
catchのコードは、コールバック関数の実行に失敗したときに実行されます.
会員登録や登録の際には、パスワードエラーや失敗時のエラーコードを確認して対応できます.
.catch(err => console.log(err.response) )
promise内で特定のコードを記述し、成功または失敗したときにpromiseを実行できます.
let promise = new Promise(function(resolve, reject){
  let a = 1 + 1;
  resolve();
});

promise.then(function(){
// 실행하고 싶은 코드
}).catch(function(){
//실패했을 때 실행하고 샆은코드 
});
実は約束は難しい.resolve ? reject ? Promiseでexcept()が宣言されている場合、catchのコードが実行されます.だからresolve、rejectはどちらも使用せず、1つだけ使用します.