2025年8月19日 星期二

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

 目的: V20305 - async 及 await 的實際用法 , 執行程序1 --> 執行程序2 --> 執行程序3  , 
           若執行程序沒問題才執行下一步驟

處理說明:  1> async 及 await 函式  - try{.. }  catch
                         async  function CALL_V20305_TEST() {    
                             try {
                               await CHECK_V20305_TEST1(true);  //檢核資枓, 若沒問題 ,才執行 TEST2
                               await CHECK_V20305_TEST2(true);      
                                     :
                            }  //end of try
                            catch (err) {
                                //若有 throw Error ,則不會再往下執行
                                 throw new Error("錯誤_try_catch_TEST: " + err); 
                            }   
                    2>function () { return new Promise(resolve,reject =>{..})   }
                        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);
                       });
                     }    





1>*.js
async  function CALL_V20305_TEST() {    
    try {
        await CHECK_V20305_TEST1(true);  //檢核資枓, 若沒問題 ,才執行 TEST2
        console.log("CHECK_V20305_TEST1 completed: ");    
        await CHECK_V20305_TEST2(true);  //檢核資枓, 若沒問題 ,才執行 TEST3
        console.log("CHECK_V20305_TEST2 completed: ");
        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) {
        console.log("錯誤_try_catch: "+err);
        mywarnalert("錯誤_try_catch:" + err);
    }
}   // end of CHECK_V20305E

function CHECK_V20305_TEST1(success,param2) {
    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");
                //throw new Error('資料載入失敗_throw');
            }
        }, 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);
    });
}


沒有留言:

張貼留言