困惑我多時的Promise和async與await

promise一直不知道他有什麼用看了不少文章都是說解決回調地獄的好方法javascript

那咱們來看看他怎麼用吧java

1、 Promise對象有三種狀態,他們分別是:promise

  • pending: 等待中,或者進行中,表示尚未獲得結果
  • resolved(Fulfilled): 已經完成,表示獲得了咱們想要的結果,能夠繼續往下執行
  • rejected: 也表示獲得結果,可是因爲結果並不是咱們所願,所以拒絕執行

這三種狀態不受外界影響,並且狀態只能從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的時候過兩秒控制檯就會打印「你好」

沒錯就是這麼簡單

相關文章
相關標籤/搜索