(TIL)同期、非同期、およびノード.jsでの非同期の処理方法
12508 ワード
同期と非同期とは?
1.同期
1番:洗濯.//1時間
2番:皿洗い時間10分
3日:掃除.//30分
こんなときは、まず洗濯して、それから茶碗を洗います.茶碗を洗って、それから掃除をして、終わってから、今日の家事は終わりました.全部で上記の3つの仕事を合わせた1時間40分かかりました.
2.非同期
2番:皿洗い時間10分
3日:掃除.//30分
まず洗濯物を洗濯機に置いて、洗濯機が動いたら茶碗を洗ってから掃除します.そして、洗濯機が動いて洗濯が終われば、今日の家事は終わり、洗濯が終われば他の家事はすべて完了し、上記の3つの仕事が終われば1時間+@程度です.同期方式に比べて、より高速で効率的に作業できます.
JavaScriptを使用したブラウザ
まず概念を話します.
... main.js page
function outer() {
function inner() {
return console.log("inner 함수 호출")
}
inner()
return console.log("outer 함수 호출")
}
outer()
console.log("main 페이지 실행")
このようにホームページを実行すると、ホームページ=>outer関数=>内部関数を呼び出す形式で実行され、結果の戻り順は次のとおりです.内部関数の呼び出し
外部関数呼び出し
コンソール結果には、実行ホームページが表示されます.
1.レストランカウンターで注文を受けます.
2.台所に呪文を伝える.
3.台所は料理をしていて、カウンターはずっと注文を受けています.
台所は楽屋です.
正式なドキュメントを表示すると、タスクを非同期で処理する関数、クエリー、およびメソッドがわかります.
非同期処理
同期、非同期の疑問点
では、無条件に非同期が良いと言えば、青少年開発者の立場から明確な答えを出すことはできない.しかし、仕事は同期して行う必要がある場合もあれば、非同期で行う必要がある場合もあります.
今回も例をあげます.
1番:洗濯物を洗濯機に入れて洗います.
2番:洗濯物を乾燥機に入れます.
3番:干した服を畳んでたんすに入れる.
上記の家事があるときに私が使っていたNodejsのような場合、仕事が洗濯物であれば、私の意志が何であれ、スタックの上に置いて、楽屋に置いて仕事をします.
非同期処理
以上の問題による非同期処理方式があります.
コールバック関数
コールバック関数は、後に実行される関数であり、非同期操作が終了した後に実行される関数である.
setTimeout((arg)=>{
console.log(arg)
setTimeout((arg)=>{
console.log(arg)
setTimeout((arg)=>{
console.log(arg)
setTimeout((arg)=>{
console.log(arg)
}, 1000, "네번째 콜백")
}, 1000, "세번째 콜백")
}, 1000, "두번째 콜백")
}, 1000, "첫번째 콜백")
このようなコールバック地獄の問題により可読性も低下し,ES 6にはpromiseオブジェクトが出現した.promise(resolve, reject) + then, catch
promisオブジェクトは,コールバック関数のコールバック地獄を解決するために現れる.
const test = new Promise((resolve, reject)=>{
if(resolve){
resolve("성공")
}
if(reject){
reject("실패")
}
});
console.log(test) // Promise { <pending> }
ただし、promisを使用して非同期処理を行うと、戻り値はpromisオブジェクトに戻り、thenとcatchが使用されます.const test = new Promise((resolve, reject)=>{
if(resolve){
resolve("성공")
}
if(reject){
reject("실패")
}
});
test.then(result=>{
return console.log(result)
})
.catch(err=>{
return console.log(result)
})
// "성공"
promisを使用すると、成功時にthenのパラメータのように使用でき、失敗時にcatchに含めて異常処理を行うことができます.3つの基本情報オブジェクトのステータス
Pending(待機):未完了
Fulfilled(実行):完了ステータス
Rejected(失敗):失敗ステータス
async & await
ES 2017の構文は、promisオブジェクトをより使いやすいのがasync&awaitです.
const test = async () => {
const test = await 비동기함수
}
このように関数の前にasyncを付け、awaitで非同期コードを呼び出してすぐに使用できるようにします.非同期処理方式は、状況に応じて使用することができる.
注意:
https://developer.mozilla.org/ko/docs/conflicting/Learn/JavaScript/Asynchronous/Promises
https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
Reference
この問題について((TIL)同期、非同期、およびノード.jsでの非同期の処理方法), 我々は、より多くの情報をここで見つけました https://velog.io/@whdgh9595/TIL-동기-비동기와-Node.js에서의-비동기처리-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol