ES6 Promise對象使用 (一)


總結下promise對象的基本使用及注意點

首先看一個Promise的最簡單實例

寫法一:
function timeout(ms) {
//返回一個 promise 對象
return new Promise((resolve, reject) => {
  setTimeout(resolve, ms, 'done'); }); } 
  // setTimeout 可以接受第二個以外的值,這些值作為參數傳給它包含的回掉函數,本案例中是 resolve。所以也可以寫成如下:
  //
setTimeout((xxx) => { resolve(xxx) }, ms, 'done'); 又或者
  // setTimeout(() => { resolve('done') },ms); 更多 setTimeout 傳參問題可自行搜索。
//返回 promise 才可調用它的 then 方法
timeout(
100).then((value) => { console.log(value); });

//換成下面寫法就沒法傳遞參數 "ms"了。

 寫法二:

function timeout(resolve, reject) {
  setTimeout(resolve, 1000, 'done');

};

let p1 = new Promise(timeout);

p1.then((value) => {

  console.log(value);
});

由上可以總結Promise使用的幾點

1. 要創建一個實例

  var p1 = new Promise(functionX)

2. new Promise(functionX) 里的functionX只接受兩個參數 resolve, reject 寫了其他的會報錯。

  Promise構造函數接受一個函數作為參數,該函數的兩個參數分別是resolvereject。它們是兩個函數,由 JavaScript 引擎提供,不用自己部署。

  resolve函數在異步操作成功時調用,並將異步操作的結果,作為參數傳遞出去。

  reject函數在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去。

  (摘自阮一峰ES6教程)

3. 之后創建的實例 p1 就可以使用 then方法:p1.then(callback1(參數),callback2(參數))

  then() 語義很清楚,然后,是在事情處理完后就調用里面的callback函數。callback1,callback2分別對應參數 resolve 和 reject 。

  then 里面 callback1 的參數,就是 上述 functionX 里 resolve 的參數。在上面實例中 resolve 的參數是 'done',則 then 里的 (value) value值就是 'done' 。

4. 實例紅色標注處表示,想要在 functionX 里傳入其他參數供函數內部邏輯使用,就需用第一種寫法:

  定義一個函數,里面 return 一個Promise。函數執行后使用then方法 fn().then()

5. 其他概念性問題提一下

 a. Promise 是異步編程的一種解決方案,比 setTimeout , setInterval 優先執行。(更多js事件機制請查看:https://segmentfault.com/a/1190000011198232)

 b.不是異步就像setTimeout , setInterval 等有計時功能。

   c. js 是單線程,所謂的異步只是把你規定為需要異步處理的事件擱在了之后執行。就好比 js 是個人的話他沒法影分身。(更多js異步請自行查閱資料)

 

參考鏈接: https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000

參考鏈接:http://es6.ruanyifeng.com/#docs/promise


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM