ajax和promise的結合使用


在需要依賴完成的ajax請求可使用promise保證執行順序 在第一個請求正確返回后再發送第二個請求

/*
  定義一個使用promise的ajax請求,這里依賴jquery
  參數中請求url為必填參數
*/
const ajaxPromise=  param => {
  return new Promise((resovle, reject) => {
    $.ajax({
      "type":param.type || "get",
      "async":param.async || true,
      "url":param.url,
      "data":param.data || "",
      "success": res => {
        resovle(res);
      },
      "error": err => {
        reject(err);
      }
    })
  })
}

/*
   第一個請求
*/
let step1 = () => {
    ajaxPromise({
      "url":"",
    }).then(res => {
        console.log("第一個請求正確返回==>"+res);  
        step2(res);  
    }).catch(err => {
        console.log("第一個請求失敗");  
    })
}

/*
   第二個請求
*/
let step2 = (res) => {
    ajaxPromise({
      "type":"get",
      "url":"",
      "data":{"name":res}
    }).then(res => {
        console.log("第二個請求正確返回==>"+res);  
    }).catch(err => {
        console.log("第二個請求失敗==>"+err);  
    })
}

step1();

  原生js寫ajaxpromise對象

const ajaxPromise =  param => {
  return new Promise((resovle, reject) => {
    var xhr = new XMLHttpRequest();
    xhr.open(param.type || "get", param.url, true);
    xhr.send(param.data || null);

    xhr.onreadystatechange = () => {
     var DONE = 4; // readyState 4 代表已向服務器發送請求
     var OK = 200; // status 200 代表服務器返回成功
     if(xhr.readyState === DONE){
      if(xhr.status === OK){
        resovle(JSON.parse(xhr.responseText));
      } else{
        reject(JSON.parse(xhr.responseText));
      }
     }
    }
  })
}

  


免責聲明!

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



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