目的: 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);
});
}
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);
});
}
沒有留言:
張貼留言