Promise

Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。

基本用法

ES6 規定,Promise對象是一個構造函數,用來生成Promise實例。下面代碼創造了一個Promise實例。

new Promise(function(resolve,reject){
       console.log('Promise');
       resolve();
}).then(function(){
        console.log('resolved.');
})
console.log('Hi!');

// Promise
// Hi!
// resolved

錯誤捕獲

promise.then(function(data) {
          // 成功時執行的代碼塊
  }, function(err) {
         // 失敗時執行的代碼塊
  });
// 等同于
promise.then(function(data) { //cb
          // 成功時執行的代碼塊
  }).catch(function(err) {
         // 失敗時執行的代碼塊
  });

其他promise方法

promise.all()【返回一個 Promise實例,此實例在 iterable 參數內所有的 promise 都“完成(resolved)”或參數中不包含 promise 時回調完成(resolve);如果參數中 promise 有一個失敗(rejected),此實例回調失?。╮eject),失敗原因的是第一個失敗 promise 的結果

Promise.all([p1,p2,p3]).then(res=>{
            console.log(res)
     })

promise.race()【返回一個 promise,一旦迭代器中的某個promise解決或拒絕,返回的 promise就會解決或拒絕?!?/p>

var promise1 = new Promise(function(resolve, reject) {
         setTimeout(resolve, 500, 'one');
});

var promise2 = new Promise(function(resolve, reject) {
        setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then(function(value) {
        console.log(value);
});

// two

async/awite

ES2017 (ES7)標準引入了 async 函數,使得異步操作變得更加方便。async 函數是什么?一句話,它就是 Generator 函數的語法糖。使異步代碼變成同步執行。

基本用法

async函數返回一個 Promise 對象,可以使用then方法添加回調函數。當函數執行的時候,一旦遇到await就會先返回,等到異步操作完成,再接著執行函數體內后面的語句。

function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

async function asyncPrint(value, ms) {
  await timeout(ms);
  console.log(value);
}

asyncPrint('hello world', 50);
上面代碼指定 50 毫秒以后,輸出hello world。

返回Promise對象

async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

注意點:

  1. async函數和普通函數一樣按順序執行,同時,在執行到await語句時,返回一個Promise對象

  2. await可以理解為將async函數掛起,直到等待的Promise被fulfill或者reject,再繼續執行之后的代碼

  3. async函數的返回值和普通Promise沒有區別

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函...
    neromous閱讀 8,727評論 1 56
  • 一. Callback (回調函數) 1.定義:把函數當作變量傳到另一個函數里,傳進去之后執行甚至返回等待之后的...
    hutn閱讀 1,551評論 0 2
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,498評論 0 8
  • 單線程 JavaScript是一門單線程的語言,被廣泛應用于瀏覽器和頁面DOM元素交互,自從Node.js出現后,...
    JunChow520閱讀 810評論 0 3
  • 一、Promise的含義 Promise在JavaScript語言中早有實現,ES6將其寫進了語言標準,統一了用法...
    Alex灌湯貓閱讀 838評論 0 2