Promise即是「承諾」之意,而產生的結果只有兩種,不是「成功」就是「失敗」,在程式裡的表示方式是"resolve"(成功) or "reject"(失敗),以下為基本語法:
let p = new Promise(function(resolve, reject) {
if (true) {
resolve('success'); // 成功
} else {
reject('failed'); // 失敗
}
});
需要先new一個Project物件,物件中包含兩個參數: resolve及reject。
resolve會在函式成功或為True的狀況下執行,reject 則是在失敗或為false的時候執行,resolve 和 reject 都有一個回傳值,可將這個會傳值透過.then傳給下一個流程。
result = true;
let p = new Promise(function(resolve, reject) {
if (result) {
resolve('success');
} else {
reject("failed");
}
});
p.then((message) => {
console.log('This is the then ' + message)
}).catch((message) =>{
console.log('This is the catch ' + d)
// This is the then success
下面這段也可以這樣排列,可讀性較高:
p
.then((message) => {
console.log('This is the then ' + message)
})
.catch((message) =>{
console.log('This is the catch ' + d)
})
Project這個物件提供了兩個方法(method): then()、catch(),如果想在Promise完成後執行後續的動作,我們可以這樣定義 p.then()
、p.catch()
:
p.then
的意思是,當這個Promise裡的程式執行完之後,且結果是resolve時,就會跳到then這裡執行then裡的程式。
p.catch
的意思是,當這個Promise裡的程式執行完之後,且結果是reject時,就會跳到catch這裡執行catch裡的程式。
獲取回傳值
這些返回值會顯現在回調函數裡的參數,這樣回調函數裡的程式碼就能使用這些返回值做進一步的處理。
參考資料:
https://www.oxxostudio.tw/articles/201706/javascript-promise-settimeout.html