1. 程式人生 > >es6學習--promise對象

es6學習--promise對象

狀態 () 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構造函數接受一個函數作為參數,該函數的兩個參數分別是resolvereject。它們是兩個函數,由 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對象