promise一直不知道他有什麼用看了不少文章都是說解決回調地獄的好方法javascript
那咱們來看看他怎麼用吧java
1、 Promise對象有三種狀態,他們分別是:promise
這三種狀態不受外界影響,並且狀態只能從pending改變爲resolved或者rejected,而且不可逆。在Promise對象的構造函數中,將一個函數做爲第一個參數。而這個函數,就是用來處理Promise的狀態變化。async
new Promise(function(resolve, reject) { if(true) { resolve() }; if(false) { reject() }; })
上面的resolve和reject都爲一個函數,他們的做用分別是將狀態修改成resolved和rejected。函數
2、 Promise對象中的then方法,能夠接收構造函數中處理的狀態變化,並分別對應執行。then方法有2個參數,第一個函數接收resolved狀態的執行,第二個參數接收reject狀態的執行。spa
function fn(num) { return new Promise(function(resolve, reject) { if (typeof num == 'number') { resolve(); } else { reject(); } }).then(function() { console.log('參數是一個number值'); }, function() { console.log('參數不是一個number值'); }) } fn('hahha'); fn(1234);
then方法的執行結果也會返回一個Promise對象。所以咱們能夠進行then的鏈式執行,這也是解決回調地獄的主要方式。code
謝謝https://www.jianshu.com/p/fe5f173276bd提供的案例對象
下面我來通俗易懂的講一下吧blog
就是這麼簡單
ip
後期更新async與await
很久不見,好久沒有更新博園了
最近完善一下async和await
咱們看到了async的返回的是一個promise 對象,若是要獲取到promise 返回值,咱們應該用then 方法
你看是否是就出來了
好,那咱們來看看他怎麼和await配合吧
這裏能夠看到yibu返回的是一個promise
然而咱們要知道await必選要在async函數裏面才能使用
那爲何startest裏面會有try catch呢
這是爲了捕獲promise的resolve
當咱們yibu的參數填1的時候過兩秒控制檯就會打印「你好」
沒錯就是這麼簡單