es6學習--promise對象
阿新 • • 發佈:2017-08-30
狀態 () bsp 函數 回調 proto script clas pan 狀態和
所謂Promise
,簡單說就是一個容器,裏面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。
1.基本用法
Promise
對象是一個構造函數,用來生成Promise
實例
function timeout(ms){ return new Promise((resolve,reject) =>{ setTimeout(resolve, ms,‘done‘) }) } timeout(100).then((value)=>{ console.log(value); })
Promise
構造函數接受一個函數作為參數,該函數的兩個參數分別是resolve
和reject
。它們是兩個函數,由 JavaScript 引擎提供,不用自己部署。
esolve
函數的作用是,將Promise
對象的狀態從“未完成”變為“成功”(即從 Pending 變為 Resolved),在異步操作成功時調用,並將異步操作的結果,作為參數傳遞出去;reject
函數的作用是,將Promise
對象的狀態從“未完成”變為“失敗”(即從 Pending 變為 Rejected),在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去。
Promise
實例生成以後,可以用then
方法分別指定Resolved
Rejected
狀態的回調函數。
2.Promise 新建後就會立即執行。
let promise = new Promise((resolve,reject) => { console.log("1"); resolve(); // 調用promise.then }) promise.then(function(){ console.log(‘3‘); }) console.log("2");
// 1 2 3
3.Promise.prototype.then()
它的作用是為 Promise 實例添加狀態改變時的回調函數。
then
方法返回的是一個新的Promise
實例(註意,不是原來那個Promise
實例)。因此可以采用鏈式寫法,即then
方法後面再調用另一個then
方法。
let promise = new Promise((resolve,reject) => { console.log("1"); resolve(); // 調用promise.then }) promise.then(function(){ console.log(‘3‘); }).then(() => { console.log("2"); }).then(() => { console.log("4"); }) // 1 3 2 4
es6學習--promise對象