js Promise學習

js Promise

  • promise入參爲兩個
    • 成功時的執行 resolve
    • 失敗時的執行 reject
  • promise的狀態

    • 肯定(fulfilled) 該 Promise 對應的操作成功了
    • 否定(rejected) 該 Promise 對應的操作失敗了
    • 等待(pending) 還沒有得到肯定或者否定結果,進行中
    • 結束(settled) 已經肯定或者否定了
  • promise必須實現then方法,只有實現then方法纔可以取出promise裏面的值

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

    promise.then(function(val) {
        console.log(val); // 1
    });
  • then方法返回的不是值,而是promise,此promise需要用then方法實現之後纔可以取出其中的值
    var promise = new Promise(function(resolve, reject) {
        resolve(1);
    });

    var aa = promise.then(function(val) {
        console.log(val); // 1
        return val + 2;
    });
    aa.then(function(data){
        console.log(data);// 3
    });
    console.log(aa);//obj

此時的aa是一個promise,狀態是pending

  • 鏈接調用;promise的鏈接調用功能是非常強大,並且代碼可讀性也是相當的高
    var promise = new Promise(function(resolve, reject) {
        resolve(1);
    });

    promise.then(function(val) {
        console.log(val); // 1
        return val + 2;
    }).then(function(data){
        console.log(data);// 3
    });
  • 執行順序;promise執行在後;
    var promise = new Promise(function(resolve, reject) {
        resolve(1);
    });

    promise.then(function(val) {
        console.log(val); // 1
    });

    console.log("first");

以上代碼會先輸入first,然後再輸出1

  • 如何取promise當中的值
  var promise = new Promise(function(resolve, reject) {
      resolve(1);
  });

  var aa = promise.then(function(val) {
      var res = {},
          age = val + 2;
      res.age = age;
      return res;
  }).then(function(data) {
      data.name = "zhangsan";
      return data;
  }).then(function(data) {
      if (data.name == "zhangsan" && data.age == 3) {
          data.address = "Hangzhou China";
      }
      return data;
  });

  aa.then(function(data) {
      console.log(data);
  })

//返回結果:
[object Object] {
  address: "Hangzhou China",
  age: 3,
  name: "zhangsan"
}

每一次實現then方法的時候,都需要將data全部組裝返回,這樣纔可以保證最後得到的值是全部的data

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章