jsにおける同期関数,非同期関数およびその具体的な応用

1447 ワード

1.同期関数:1つの関数が同期して呼び出されると、その関数が呼び出されないときはすぐに戻ることはなく、その関数がすべきことがすべて終わるまで戻ることはありません.非同期関数:非同期関数が呼び出されると、この関数によって規定された操作タスクがまだ完了していないにもかかわらず、関数はすぐに戻ります.
JAvascriptは非同期プログラミングで、これはjsの利点ですが、その欠点の一つでもあります.関数実行完了の結果を使用して次の操作を行う場合、いくつかの面倒があります.この問題を解決する方法はコールバックです.コールバックのコードの階層が深くてメンテナンスが不便なのでpromiseがありますが、promiseにもいくつかの欠点があります.だから、asyncとawaitがあります.しかし、両者にはそれぞれの長所があるので、通常は両者を組み合わせて使用しています.
jsではasync関数式を使用して非同期関数を定義できます.非同期関数ではawaitを使用してpromiseに置く前に、promiseが実行または拒否されるまでこの関数の実行を一時停止します.
非同期関数を並列に実行
function pause(){
 return new Promise((res)=>setTimeout(res,500));
}

const promise1 = pause();
const promise2 = pause();
Promise.all([promise1,promise2]).then(()=>{console.log('i will be logged after 500ms')})

しかし、このように書くと、awaitは最初の完了後に実行を開始するので、1000 ms後にコンテンツを印刷する必要があります.
async function waitForMoment(){
	await pause();
	await pause();
	console.log('i will be logged after 1000ms');
}

この問題を解決するために、位置を調整しなければなりません.
async function inParalell(){
	const await1 = pause();
	const await2 = pause();
	await await1;
	await await2;
	console.log('i will be logged after 500ms');
}

funcでは、async式で作成された非同期関数をよく使用しています.
export async function listAll(param){
  return request(createTheURL(Config.API.APPLICATION,'list'),{
    method: 'GET',
    body:param,
  })
}

request関数はpromiseを返します