PromiseとAsync/await
4650 ワード
🧐 概要
JSコースでは、Promisと非同期プログラミングがあります...
やはり私はすっかり忘れてしまって、問題が発生しました.😅
周口槍を開発する際には,データベース操作を非同期操作する順序操作が必要である.
ついでにその過程を解決する概念を整理します.
😡 What's The Problem?
ユーザーが添付ファイルをダウンロードするとき
クライアントがファイルのソース名を表示してクリックします.
サーバ側では、ファイル名が他のファイルと同じである可能性があるという問題があります.
事前に特定のパターンに変更して保存できます.
したがって、ファイル名と記事のIDを使用して、データベース内のファイルの実際のパスを確認できます.
文章に複数のファイルが添付されている場合.
カラムには2つ以上のファイルアドレスが含まれているため、分割する必要があります.
ここでは、パスを特定する前に、DBの作業を完了しておく必要があります.
ただし、SQL Fetchは時間がかかります.
3日が終わる前に、4日を先に実行中にエラーが発生しました.
🙄 Solution?
最初の試みの方法はsettimeoutです.
conn.getConnection((err,rows)=>{
if (err) throw err;
connection.query(sql,(err,rows)=>{
str = filepath;
connection.release();
}
}
setTimeout(function(){
fileList = str.split('+');
res.download(fileList[0],originalFileName);
},1000)
// 완전한 코드가 아닙니다. 제 코드가 너무 길어 상징성 있는 것을 빼곤 지웠습니다.
スターリングを精錬する第4歩を少し遅らせる.DBタスクを優先的に処理します.
しかし、データベースにエラーがあるか、遅延の長さが分からない可能性があります.
他の方法を見つけ、Promise Async/Await構造に変更します.
私たちは1、2時間かけて概念を見つけたと思います.😅 ..
📋 What is Promise?
Promiseは、JavaScriptのES 6に追加されたコンセプトです.
非同期タスクを順番に実行する必要がある場合、
頻繁に現れるコールバックオーバーラップ,すなわちcallback hell現象を解決した.
プロセス・オブジェクトには、次の3つのステータスがあります.
2-1. 成功した時はフルフィル状態になりましたそしてそこに移る.ここでは、非同期処理後に作業するコンテンツを作成できます.
2-2. エラーが発生した場合は、「拒否」ステータスに入り、エラー処理を行います.
//프로미스 생성
const work1 = function(a){
return new Promise(function(resolve,reject){
if(a){
resolve("성공");
}
else{
reject("실패");
}
});
}
//프로미스 실행
work1(true).then(function(result){
console.log(result); // 성공
},function(err){
console.log(err); // 실패
});
上記のコードについて:成功/失敗のみを出力します.
「作業1」で先行タスクを作成し、「作業1」で後続のタスクを追加できます.
const work1 = function(){
const a = true;
const work2 = function(param){
if (param){
console.log('성공!')
else{
console.log('실패!')
}
コールバック関数として作成された場合、現在は2つのタスクしかありません.追加されたタスクが複雑であればあるほど、目が痛くなります.😡
要するに,Promiseオブジェクトは状態と同じであることが重要である.
✔ Promise Chaining
Promiseの.その後、ライン/後続のタスクを簡単に制御できます.
work1(true).then(function(){
console.log('작업1');
}).then(function(){
console.log('작업2');
}).then(function(){
console.log('작업3');
}).catch(function(err){
console.log(err);
}
このようにして、非常に複雑な三重コールバック動作を表すことができる.また、上のcatchでエラーのみが出力され、同時にPromisオブジェクトが返された場合、
続けられる
📋 AsyncとAwait
コールバックとpromisの欠点を補い、可読性を高める文法.
この文法の焦点は「見た内容を読ませる」ようだ.
async function Test(){
let tempVar = await tempFunc();
if (tempVar.status == true)
console.log('완료!');
}
awaitの関数を使用するにはasyncを追加する必要があります.次に、awaitキー付きの関数を処理する必要があります.
すなわち,tempFunc()の状態が完了するとif文が実行される.
前述したように、Promiseオブジェクトには状態があります.
つまり、Async/AwaitはPromiseとの結合においてより優れている.
let work1 = function(a){
return new Promise(function(resolve,reject){
if(a){
resolve("성공");
}
else{
reject("실패");
}
});
}
let work2 = function(b){
return new Promise(function(resolve,reject){
if(b){
resolve("성공");
else{
reject("실패");
}
});
}
let worker = async function(){
console.log(await work1(a));
console.log(await work2(a));
}
worker().then(function(){
console.log('추가 작업?')
}
簡単な例を作成しました.worker変数にはasync/awaitからなる関数が含まれます.
したがって、「作業1」が先行すると、「作業2」が後行になります.
上で作成したPromise Chainingとよく似ています.
一番下.その後、後続のアクションを定義することもできます.
🎯 だから何が一番好きですか?
Callback, Promise, Async/Await.
すべての操作の結果自体は同じですが、可読性には個人差がある可能性があります.
個人的には、Async/Awaitでコード自体をモジュール化したいと思っています.
明日やる仕事は多くのコールバック関数を新しい概念に変換することです.😱
Reference
この問題について(PromiseとAsync/await), 我々は、より多くの情報をここで見つけました https://velog.io/@leitmotif/Node.js의-비동기식-처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol