目的: V20305E: 程序1-->程序2-->程序3
-JavaScript 的用法 async & await – 並包成 try {..} catch{..} 顯示錯誤訊息
-JavaScript 的用法 async & await – 並包成 try {..} catch{..} 顯示錯誤訊息
處理說明: 1> 程序1-->程序2-->程序3 - 每一程序執行OK,才執行下一程序
將function 包成 async 及 await - 並利用 try{..} catch {..} - 顯示錯誤訊息
async function CALL_V20305_ALL() {try {await CALL_STEP1();await CALL_STEP2();
await CALL_STEP3();
mywarnalert("成功_finally:CALL_V20305_ALL -完成");
} //end of try
catch (err) {
mywarnalert(err);}} // end of async CALL_V20305_ALL
2>程序1 :
async function CALL_STEP1() {try {
Ext.util.Cookies.set("Rtn_Msg", "");await CHECK_V20305_TEST1(true);Ext.util.Cookies.set("Rtn_Msg", "");await CHECK_V20305_TEST2(true);Ext.util.Cookies.set("Rtn_Msg", "");await CHECK_V20305_TEST3(true);
} // end of CALL_STEP1} //end of trycatch (err) {throw new Error(err); //若有 throw Error ,則不會再往下執行 --> 會自動加 Error:}
3> await 函式 : 必需包成 Promise
function CHECK_V20305_TEST1(success) {return new Promise((resolve, reject) => {setTimeout(() => {if (success) {resolve({ data: '這是伺服器回傳的資料 1' }); //成功傳回資料} else {reject('資料載入失敗_reject 1'); //會自動發出 throw exception}}, 1000);
})
}
async function CALL_V20305_ALL() {
try {
Ext.util.Cookies.set("Rtn_Msg", "");
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("錯誤_CALL_V20305_ALL:" + err);
mywarnalert(err);
}
async function CALL_V20305_TEST() {
try {
Ext.util.Cookies.set("Rtn_Msg", "");
await CHECK_V20305_TEST1(true); //檢核資枓, 若沒問題 ,才執行 TEST2
console.log("CHECK_V20305_TEST1 completed: ");
Ext.util.Cookies.set("Rtn_Msg", "");
await CHECK_V20305_TEST2(true); //檢核資枓, 若沒問題 ,才執行 TEST3
console.log("CHECK_V20305_TEST2 completed: ");
Ext.util.Cookies.set("Rtn_Msg", "");
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(err); //若有 throw Error ,則不再往下執行 - throw new Error(..)會自動加 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");
// //throw new Error('資料載入失敗_throw');
// }
//}, 1000);
var Tmp_isok = true;
var Tmp_DataAry = [];
for (let i = 0; i <= CHK_PK_OBJ.PK_LIST.length - 1; i++) {
cur_rec = CHK_PK_OBJ.ALL_LIST[i];
Tmp_DataAry.push(cur_rec);
} //end of for (let i = 0; i <= CHK_PK_OBJ.PK_LIST.length - 1; i++) {
var Tmp_DataAryStr = JSON.stringify(Tmp_DataAry);
var np = {};
np["DataArySTr"] = Tmp_DataAryStr;
//CHECK_V20305E_1 - 檢核交修單號已有工時/開放提料/TLS已有請料未提出記錄( CSM_AR,CSM_AF,CSM_UOCD)
Tmp_url = '../../api/V20305EAPI/CHECK_V20305E_1';
Ext.getCmp('s_form').submit({
method: "POST",
url: Tmp_url, //更新資料庫單況
standardSubmit: true,
params: np,
async: false,
}); //end of Ext.Ajax.Request
var mask = new Ext.LoadMask(Ext.getBody(), {
msg: '[請料提出]鈕,資料檢核中_1, 請稍待...'
});
mask.show();//使用 mask 需手動呼叫show() 方法下
var timer = setInterval(function () {
var r = r_cookies('Rtn_Msg');
console.log("cookies Rtn_Msg =", r);
//若有傳回值,則執行下一步驟
if (!checkisnull(r)) {
mask.hide();
clearInterval(timer);
if (r.indexOf("錯誤") > -1) {
r = r.replace(/\r\n/g, "<br>"); //置換所有 /r/n --> <br>
console.log("CHECK_V20305E_1 failure !! ")
reject(r); //產生錯誤訊息
Tmp_isok = false;
//return r; //若有錯誤,則顯示錯誤訊息, 不再執行下一步騳
}
if (r.indexOf("成功") > -1) {
console.log("CHECK_V20305E_1 ok !! ")
resolve(r); // TEST OK
}
} //end of if (!checkisnull(r)) {
}, 1000) // end of timer
}); // end of new Promise
}
沒有留言:
張貼留言