淺談Promise的理解

promise是什麼呢?一個構造函數,自身的方法有all,reject,resolve這麼幾個方法,原型上面有then,catch等方法.
1.他的兩個特性
(1) 對象的狀態不受外界影響。Promise是一個異步的操作,本身有三種狀態 pending(進行中),fulfilled(已成功)和rejected(已失敗).只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態.
(2)一旦改變狀態,就不會再改變.比如你定義了一個Promise, 狀態爲fulfilled 你就會then()到成功的結果.再catch()也拿不到失敗的結果了

所以我們用Promise的時候一般是包在一個函數中,在需要的時候去運行這個函數,如:

function goAsync(){
    var p = new Promise(function(resolve, reject){
        //做一些異步操作
        setTimeout(function(){
            console.log('執行完成');
            resolve('成功');
        }, 1000);
    });
    return p;            
}
goAsync()

在這裏插入圖片描述
然後

goAsync().then(function(data){
	console.log(data)
})

在這裏插入圖片描述

然後他可以做鏈式操作
同樣定義一個Promise

function doSomething(){
    var p = new Promise(function(resolve, reject){
        //做一些異步操作
        setTimeout(function(){
            console.log('正在執行');
            resolve('成功2');
        }, 1000);
    });
    return p;            
}

goAsync().then(function(data){
	console.log(data)
	return doSomething()//這裏執行下一條一定要return
}).then(function(data){
	console.log(data)
})

在這裏插入圖片描述
all的用法
Promise的all方法提供了並行執行異步操作的功能,並在所有異步執行完成回調一個數組.
在這裏插入圖片描述
race的用法
race在調用時跟all類似,都是數組加載異步,但是區別就在於race是哪個異步操作快返回哪個;
我重新定義以下deSomething()爲2000ms
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章