這裏講的 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