出自阮一峯(ECMAScript 6 入門) http://es6.ruanyifeng.com/#docs/promise
基本用法
ES6 規定,Promise
對象是一個構造函數,用來生成Promise
實例。
下面代碼創造了一個Promise
實例。
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 異步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
Promise
構造函數接受一個函數作爲參數,該函數的兩個參數分別是resolve
和reject.
Promise
實例生成以後,可以用then
方法分別指定resolved
狀態和rejected
狀態的回調函數。
promise.then(function(value) {
// success
}, function(error) {
// failure
});
then
方法可以接受兩個回調函數作爲參數。第一個回調函數是Promise
對象的狀態變爲resolved
時調用,第二個回調函數是Promise
對象的狀態變爲rejected
時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise
對象傳出的值作爲參數。
下面是一個Promise
對象的簡單例子。
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}
timeout(100).then((value) => {
console.log(value);
});
上面代碼中,timeout
方法返回一個Promise
實例,表示一段時間以後纔會發生的結果。過了指定的時間(ms
參數)以後,Promise
實例的狀態變爲resolved
,就會觸發then
方法綁定的回調函數。