vue-Promise的鏈式調用


  上一篇講了promise的使用,這里不加贅述。但有時候會發現then里面的代碼即使抽離出來還是很多,有沒有辦法再進行抽離呢?promise也提供這樣的方式,能讓回調后的代碼進行一塊一塊地處理,代碼如下:

  new Promise((resolve, reject) => {
    //執行異步請求
    $.get("test.cgi", {
        name: "John",
        time: "2pm"
      },
      function (data) {
        resolve(data)
      });
  }).then(data => {
    alert("Data Loaded處理1: " + data); //這里處理第一部分
    alert("Data Loaded處理1: " + data);

    return new Promise(resolve => { //調用下一個then
      resolve(data)
    })
  }).then((data) => {
    alert("Data Loaded處理2: " + data); //處理第二部分
    alert("Data Loaded處理2: " + data);
    alert("Data Loaded處理2: " + data);

    return new Promise(resolve => {
      resolve(data)
    })
  }).then((data) => {
    alert("Data Loaded處理3: " + data); //第三部分
    alert("Data Loaded處理3: " + data);
  })

  當然了,這里只是演示了resolve,但reject的使用也是差不多,是調用下一個catch而已;

  回歸正題,我們發現進入到下一個then,要 return new Promise....,代碼有點長,有沒有簡便寫法呢?有,如下:

  new Promise((resolve, reject) => {
    //執行異步請求
    $.get("test.cgi", {
        name: "John",
        time: "2pm"
      },
      function (data) {
        resolve(data)
      });
  }).then(data => {
    alert("Data Loaded處理1: " + data);
    alert("Data Loaded處理1: " + data);

    return Promise.resolve(data)
  }).then((data) => {
    alert("Data Loaded處理2: " + data);
    alert("Data Loaded處理2: " + data);
    alert("Data Loaded處理2: " + data);

    return Promise.resolve(data)
  }).then((data) => {
    alert("Data Loaded處理3: " + data);
    alert("Data Loaded處理3: " + data);
  })

  你以為這樣就最簡便了?不,還有更簡便的:

  new Promise((resolve, reject) => {
    //執行異步請求
    $.get("test.cgi", {
        name: "John",
        time: "2pm"
      },
      function (data) {
        resolve(data)
      });
  }).then(data => {
    alert("Data Loaded處理1: " + data);
    alert("Data Loaded處理1: " + data);

    return data
  }).then((data) => {
    alert("Data Loaded處理2: " + data);
    alert("Data Loaded處理2: " + data);
    alert("Data Loaded處理2: " + data);

    return data
  }).then((data) => {
    alert("Data Loaded處理3: " + data);
    alert("Data Loaded處理3: " + data);
  })

 


免責聲明!

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



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