2025年8月20日 星期三

V20305 - async 及 await 的實際用法_2 , 主程序1 --> 主程序2 , 若主程序1沒問題 , 才執行下一主程序2

 目的: V20305 - async 及 await 的實際用法_2, - 兩個主程序 , 主程序沒問題
            執行主程序1 --> 執行主程序2  , 若主程序1沒問題才執行下一主程序2

處理說明: 1>async function CALL_V20305_ALL() {
                       try {        
                                await CALL_V20305_TEST();
                                await CALL_V20305_UPDATE();
                                mywarnalert("成功_finally:CALL_V20305_ALL -完成");
                              }  //end of try
                       catch (err) {
                                            mywarnalert("錯誤_try_catch_ALL:" + err);
                       }
                       }   // end of CALL_V20305_ALL
              
                2>async  function CALL_V20305_TEST() {    
                      try {
                               await CHECK_V20305_TEST1(true);   //true/false : 成功/失敗
                               await CHECK_V20305_TEST2(true);   
                               await CHECK_V20305_TEST3(true);   
                             }  //end of try
                   catch (err) {
                             //若有 throw Error ,則不會再往下執行 , 不則會視為沒錯誤
                             throw new Error("錯誤_try_catch_TEST: " + err);  
                           }    
                    }   // end of CALL_V20305_TEST

               3>async function CALL_V20305_UPDATE() {
                   try {
                          await CHECK_V20305_UPDATE1(true);   //檢核資枓, 若沒問題 ,才執行 TEST2
                          await CHECK_V20305_UPDATE2(true);   //檢核資枓, 若沒問題 ,才執行 UPDATE3
                          await CHECK_V20305_UPDATE3(true);
                          }  //end of try
                catch (err) {
                     //若有 throw Error ,則不會再往下執行, 否則視為沒問題, 仍會往下執行
                      throw new Error("錯誤_try_catch_UPDATE: " + err);  
                   }
                  }   // end of CALL_V20305_UPDATE
              
              4>function CHECK_V20305_TEST1(success) {
                   return new Promise((resolve, reject) => {
                       setTimeout(() => {
                       if (success) {
                           resolve({ data: '這是伺服器回傳的資料 1' });  //-->會傳回資料                     
                       } else {
                       reject('資料載入失敗_reject 1');  //--> 會產生 throw Exception
                        console.log("CHECK_V20305_TEST1 - reject");
                       //throw new Error('資料載入失敗_throw');
                       }
                     }, 1000);
                      });
                  }

               5>function CHECK_V20305_TEST2(success) {
                      return new Promise((resolve, reject) => {
                      setTimeout(() => {
                      if (success) {
                           resolve({ data: '這是伺服器回傳的資料_2' });
                           console.log("CHECK_V20305_TEST2 - resolve");
                      } else {
                          reject('資料載入失敗_reject_2');
                          console.log("CHECK_V20305_TEST2 - reject");
                          //throw new Error('資料載入失敗_throw');
                      }
                  }, 1000);
                  });
               }




1>V20305_TEST.js
async function CALL_V20305_ALL() {
    try {        
        await CALL_V20305_TEST();
        console.log("CHECK_V20305_TEST() 完成!!: ");
        await CALL_V20305_UPDATE();
        console.log("CHECK_V20305_UPDATE 完成!!: ");        
        console.log("成功_finally:CALL_V20305_ALL -完成");
        mywarnalert("成功_finally:CALL_V20305_ALL -完成");
    }  //end of try
    catch (err) {
        console.log("錯誤_try_catch_ALL: " + err);
        mywarnalert("錯誤_try_catch_ALL:" + err);
    }
}   // end of CALL_V20305_ALL


async function CALL_V20305_UPDATE() {
    try {
        await CHECK_V20305_UPDATE1(true);   //檢核資枓, 若沒問題 ,才執行 TEST2
        console.log("CHECK_V20305_UPDATE1 completed: ");
        await CHECK_V20305_UPDATE2(true);   //檢核資枓, 若沒問題 ,才執行 UPDATE3
        console.log("CHECK_V20305_UPDATE2 completed: ");
        await CHECK_V20305_UPDATE3(true);
        console.log("CHECK_V20305_UPDATE3 completed: ");
        console.log("成功_finally:CALL_V20305_UPDATE -完成");
        //mywarnalert("成功_finally:CALL_V20305_UPDATE -完成");
    //end of try
    catch (err) {
        //console.log("錯誤_try_catch_UPDATE: " + err);
        //mywarnalert("錯誤_try_catch_UPDATE:" + err);
        throw new Error("錯誤_try_catch_UPDATE: " + err);  //若有 throw Error ,則不會再往下執行
    }
}   // end of CALL_V20305_UPDATE

function CHECK_V20305_UPDATE1(success, param2) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料 1' });
                console.log("CHECK_V20305_UPDATE1 - resolve");
            } else {
                reject('資料載入失敗_reject 1');  //reject 會自動發出 throw
                console.log("CHECK_V20305_UPDATE1 - reject");
            }
        }, 1000);
    });
}

function CHECK_V20305_UPDATE2(success) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料_2' });
                console.log("CHECK_V20305_UPDATE2 - resolve");
            } else {
                reject('資料載入失敗_reject_2');
                console.log("CHECK_V20305_UPDATE2 - reject");
            }
        }, 1000);
    });
}

function CHECK_V20305_UPDATE3(success) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料_3' });
                console.log("CHECK_V20305_UPDATE3 - resolve");
            } else {
                reject('資料載入失敗_reject_3');
                console.log("CHECK_V20305_UPDATE3 - reject");
            }
        }, 1000);
    });
}





async  function CALL_V20305_TEST() {    
    try {
        await CHECK_V20305_TEST1(true);   //若沒問題 ,才執行 TEST2 - true/false : 成功/失敗
        await CHECK_V20305_TEST2(true);   //檢核資枓, 若沒問題 ,才執行 TEST3
        await CHECK_V20305_TEST3(true);   
        console.log("CHECK_V20305_TEST3 completed: ");
        console.log("成功_finally:CALL_V20305_TEST -完成");
        //mywarnalert("成功_finally:CALL_V20305_TEST -完成");
    }  //end of try
    catch (err) {
        throw new Error("錯誤_try_catch_TEST: " + err);  //若有 throw Error ,則不會再往下執行
    }    
}   // end of CALL_V20305_TEST

function CHECK_V20305_TEST1(success) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料 1' });
                console.log("CHECK_V20305_TEST1 - resolve");              
            } else {
                reject('資料載入失敗_reject 1');
                console.log("CHECK_V20305_TEST1 - reject");
            }
        }, 1000);
    });
}

function CHECK_V20305_TEST2(success) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料_2' });
                console.log("CHECK_V20305_TEST2 - resolve");
            } else {
                reject('資料載入失敗_reject_2');
                console.log("CHECK_V20305_TEST2 - reject");
                //throw new Error('資料載入失敗_throw');
            }
        }, 1000);
    });
}

function CHECK_V20305_TEST3(success) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (success) {
                resolve({ data: '這是伺服器回傳的資料_3' });
                console.log("CHECK_V20305_TEST3 - resolve");
            } else {
                reject('資料載入失敗_reject_3');
                console.log("CHECK_V20305_TEST3 - reject");
                //throw new Error('資料載入失敗_throw');
            }
        }, 1000);
    });
}


沒有留言:

張貼留言