promisepromise
promise就是一個對象,存儲着異步函數返回的結果
promise有三種狀態:異步
1.pending(進行中)函數
2.fulfilled(已完成)更多則用resolvedui
3.rejected(已失敗)spa
這三種狀態,何時展示,就看異步函數返回的結果.code
promise對象是一個構造函數regexp
例子:對象
new Promise((resolve,reject)=>{ console.log('Promise','test'); //reject(); // test1 resolve(); //test2 }).then(() => { console.log('resolved','test') }).catch(() => { console.log('hi','test') }) ////test1 output: Promise test hi test ///test2 output: Promise test resolved test
reslove 表明成功以後執行的行數,調用reslove()則就執行then方法.回調函數
.then能夠有多個方法,將依次執行.同步
調用reject(),則就執行失敗後回調的方法.catch裏面的方法
例子2:
在一個函數中返回一個promise對象,當調用該函數時,去判斷是否執行哪一個回調函數
function doSomething(index) {
return new Promise((resolve,reject) => { console.log('promise created!') if( index > 5){ resolve(); } else reject(); }) } doSomething(2).then((value) =>{ console.log('我大於5哦~') }).catch((value) => { console.log('我小於5哦~') }) /// output promise created! 我小於5哦~
Ps:若是在doSomething函數中不去返回promise對象,就在調用改函數時用then方法,是會報錯!!!!
執行順序: promise建立後就會執行,當全部的同步執行結束後纔會執行then等回調函數.
一個promise對象的結果做爲參數給另外一個promise對象
const p1 = new Promise(function (resolve,reject) { reject(); }) const p2 = new Promise(function(resolve,reject) { resolve(p1); }) p1.then(() => { console.log('p1 resolve') }).catch(()=> { console.log('p1 reject') }) p2.then(() =>{ console.log('p2 resolve') }).catch(() => { console.log('p2 reject') }) /// output p1 reject p2 reject
即p1的結果會影響到p2
promise的finally()方法
promise
.then( result => {...}) .catch( error => {...}) .finally(() => {...})
finally方法就是不管promise對象的最後狀態如何,都會執行的方法.