這裏講的 Promise 不是講的 "邦民" 的。而是講 Javascript 上的 Promise。
### 起源
自從 AJAX 技術興起後,異步的 Javascript 有了很多元化的發展,當然萬變不離其中也是使用 Callback 的方法來達成 ( 也即是 Observe Pattern 的簡化版 )。由 Async Waterfall 到現時 Promise 方法處理異步 Callback,當中經過了很多時間變化。
### 語法
現時 Promise 是一個 Javascript 的原生 Object (ES2015 後),用來處理 Javascript 異步的回傳。
```js
// create new promise
var promise1 = new Promise((resolve, reject) => {
// your task here
setTimeout(() => {
// random condition
if( Math.round(Math.random() * 10) > 5 ) {
// success and callback data
resolve('foo');
} else {
// failure and callback error
reject(new Error('bar'));
}
}, 100);
});
// handle promise success
const success = data => console.log(data);
// handle promise failure
const failure = error => console.error(error);
// handle promise result
promise1.then(success, failure);
```
而當這個 Promise Object 建立的同時,自定義的功能已經在背後異步運行的了。運行完的結果可以透過使用 `resolve` 回傳出去。
我們則可以利用 `then` 功能把回傳成功的值接住。第一個參數是接著一個 function,用來處理成功時的結果,第二個參數也是接著一個 function,不過就用來接著失敗時的 error。
另外 Promise 不只是只有這些功能的,下面這個 Link 會有更多的功能介紹 !
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise