promise 跟回調函數相比,可讓咱們更方便地定義
異步返回後的操做。
基本用法:javascript
//指定函數名 a、b let p = new Promise(function(a, b){ //指定promise何時改變狀態,以及改變時傳遞的數據 setTimeout(()=>a('I am resolve message'), 1000)//1 setTimeout(()=>b('I am reject message'), 3000);//2 }); //指定改變時的回調函數,來處理數據 p.then(msg=>console.log(msg), msg=>console.log(msg))
咱們不用操心改變狀態這個過程的實現,而只須要指定函數名a
、b
——它們的函數體由瀏覽器定義,功能分別是將promise
的狀態變成「成功」和「失敗」。java
當promise
狀態改變時,瀏覽器就會調用回調函數。promise
注意 promise
的狀態只能從「未完成」變成「成功」或「失敗」,而不能從「成功」變成「失敗」,因此上面代碼中,當1生效後,2就不會生效了。另外傳遞的數據能夠是任何類型,甚至能夠是promise
類型來實現鏈式調用。瀏覽器
理解了基本的流程,其餘的API應該也很容易了。異步