0%

promise

處理非同步(回應)的操作

有時等待非同步(asynchronous)的操作時,不知要等到多久才有回應,那就要用到promise。
promise會負責看守非同步操作的回應,並讓程式繼續往下執行。
當成功執行非同步操作會呼叫resolve,失敗便呼叫reject。

假設有一個程式用setTimeout扮作非同步的操作,要5秒後才有回應。
用promise捕捉住操作(隨時)的回應,但不會阻礙程式向下的線性執行。
整個程式執行後。當非同步的操作完成,才會呼叫then作後隨的動作。

1
2
3
4
5
6
7
8
9
10
11
12
13
document.writeln("程式開始~");//1.
document.writeln("<br>");
const promise1 = new Promise((resolve, reject) => {//2.
setTimeout(() => {//非同步操作
resolve('等了5秒才來﹗');//5.
}, 5000);
});
document.write("已啟動promise~");//3.
document.writeln("<br>");
promise1.then((value) => {//6.value='等了5秒才來﹗'
alert('我現在才收到你說的﹕'+value);
});
document.write("已執行程式。");//4/
  1. 程式開始
  2. 產生promise
  3. 已啟動promise
  4. 已執行程式
  5. 等待非同步操作完成,resolve接應回應
  6. promise.then執行非同步操作完成的動作

resolve/reject會接受完成之非同步操作的回傳,及後promise的then接續下個行動。