每天學點ES6 —— 瞭解 Promise

已發ES6文章:

1~14

15

注意注意注意

異步和回調函數

當我們做一個異步操作的時候(比如ajax請求),往往需要指定回調函數(success),並在特定的時候執行它。

//常見的ajax

$.ajax(

 url:'xx',

 success:functon(msg){

  ...

 }

)

es6 中的 Promise 讓異步的回調可以通過then方法傳,例如

var p=new Promise(function(resolve){

 $.ajax(

  url:'xx',

  success:resolve

 )

});

p.then(successCallback);

函數 successCallback 會在 ajax 請求成功後執行,雖然是異步操作,但是在代碼上寫法是同步的:

先執行異步請求 > 請求完成後(then)執行成功函數。

以上就是 Promise 的作用,當然還有其他的功能。

Promise作用

Promise 讓異步操作可以以同步的形式寫出來,避免了層層嵌套的尷尬。

比如 ajax 定時器 事件等。

Promise( fn(resolve,reject) ) 構造函數

用來創建Promise對象,參數是個函數,該函數可以介接收2個參數:resolve 和 reject。

- resolve(value)

函數,在你認為成功時調用它,value是你想傳的值

- reject(value)

函數,在你認為失敗時調用它

Promise 在實例化過程中會立馬執行fn, 遇到resolve會等待回調被then方法傳入後執行,遇到reject則會立即執行,此時沒傳入回調則報錯 Uncaught (in promise)。

then(resolve, reject) 方法

將回調函數傳給 Promise 對象,它和 fn(resolve,reject) 的參數對應,且回調函數傳入到執行是異步的(沒傳入則不執行)。

  • resolve & reject 函數會在 Promise 內被調用後執行,或是在代碼執行完/報錯後執行。

// 形式

var promise=new Promise(function(resolve,reject){

 ...

});

promise.then(resolve,reject);

  • then是可鏈式調用的,也是按照順序執行。

var p=new Promise(function(r){

 setTimeout(r,1000)

};

p.then(function(){

 console.log(1)

}).then(function(){

 console.log(2)

});

//1

//2

  • 實際上then方法必須返回新Promise對象,可以手動返回(return)也可默認返回(單純執行resolve),因為返回了新Promise,所以可以鏈式調用

  • then方法的返回值會被傳入下一個then方法的回調函數里

var p=new Promise(

 function(resolve,reject){

  resolve()

 }

);

p.then(function(){

 console.log(1);

 return 2;

}).then(function(x){

 console.log(x)

});

//1

//2

文章到這裡結束,下篇 ☞ Promise下

關注一下不迷路~


每天學點ES6 —— 瞭解 Promise

【html】【css】【html】【css】【javascript】【html】【javascript】【css】【javascript】【css】


分享到:


相關文章: