目的: 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);
});
}