Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Memudahkan Permintaan XHR Asli Menggunakan Janji?

Bagaimanakah Saya Boleh Memudahkan Permintaan XHR Asli Menggunakan Janji?

Barbara Streisand
Barbara Streisandasal
2024-12-07 07:50:13325semak imbas

How Can I Simplify Native XHR Requests Using Promises?

Promisifying Native XHR: Pendekatan Ringkas

Dalam aplikasi bahagian hadapan, janji asli menawarkan cara yang mudah untuk mengendalikan operasi tak segerak. Walau bagaimanapun, memasukkannya ke dalam permintaan XHR asli boleh mencabar tanpa bergantung pada rangka kerja yang kompleks. Artikel ini bertujuan untuk merapatkan jurang ini dengan menyediakan panduan ringkas tentang menjanjikan permintaan XHR asli.

Memahami Isu

Sebelum menjanjikan permintaan XHR, adalah penting untuk memahami pendekatan berasaskan panggilan balik biasa. Berikut ialah contoh permintaan XHR asas menggunakan panggilan balik:

function makeXHRRequest(method, url, done) {
  var xhr = new XMLHttpRequest();
  xhr.open(method, url);
  xhr.onload = function () {
    done(null, xhr.response);
  };
  xhr.onerror = function () {
    done(xhr.response);
  };
  xhr.send();
}

Pendekatan ini berfungsi dengan baik untuk senario mudah, tetapi ia tidak mempunyai fleksibiliti dan kebolehkomposisian yang ditawarkan oleh janji.

Janji menggunakan the Promise Constructor

Untuk menjanjikan permintaan XHR, kami boleh memanfaatkan pembina Janji. Pembina ini mengambil fungsi dengan dua hujah, selesaikan dan tolak, yang boleh dianggap sebagai panggilan balik untuk kejayaan dan kegagalan, masing-masing.

Mari kemas kini makeXHRRequest untuk menggunakan pembina Promise:

function makeRequest(method, url) {
  return new Promise(function (resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.open(method, url);
    xhr.onload = function () {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.response);
      } else {
        reject({
          status: xhr.status,
          statusText: xhr.statusText
        });
      }
    };
    xhr.onerror = function () {
      reject({
        status: xhr.status,
        statusText: xhr.statusText
      });
    };
    xhr.send();
  });
}

Kod ini memulakan Promise baharu, membuka permintaan XHR dan mengendalikan kedua-dua kejayaan dan ralat senario.

Pengendalian Rantaian dan Ralat

Janji menyediakan cara yang berkesan untuk merantai berbilang permintaan XHR dan mengendalikan ralat dengan berkesan. Berikut ialah contoh permintaan rantaian dan ralat pengendalian:

makeRequest('GET', 'https://www.example.com')
  .then(function (datums) {
    return makeRequest('GET', datums.url);
  })
  .then(function (moreDatums) {
    console.log(moreDatums);
  })
  .catch(function (err) {
    console.error('Augh, there was an error!', err.statusText);
  });

Dalam kod ini, kami mula-mula membuat permintaan GET kepada 'example.com' dan kemudian, berdasarkan respons, membuat permintaan GET yang lain untuk titik akhir yang berbeza (dinyatakan dalam tindak balas). Sebarang ralat yang dihadapi semasa mana-mana permintaan akan dikendalikan oleh klausa tangkapan.

Parameter dan Pengepala Tersuai

Untuk menjadikan janji XHR kami lebih serba boleh, kami boleh menyesuaikan parameter dan tajuk. Kami akan memperkenalkan objek opts dengan tandatangan berikut:

{
  method: String,
  url: String,
  params: String | Object,
  headers: Object,
}

Berikut ialah versi makeRequest yang diubah suai yang membenarkan parameter dan pengepala tersuai:

function makeRequest(opts) {
  return new Promise(function (resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.open(opts.method, opts.url);
    xhr.onload = function () {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.response);
      } else {
        reject({
          status: xhr.status,
          statusText: xhr.statusText,
        });
      }
    };
    xhr.onerror = function () {
      reject({
        status: xhr.status,
        statusText: xhr.statusText,
      });
    };
    if (opts.headers) {
      Object.keys(opts.headers).forEach(function (key) {
        xhr.setRequestHeader(key, opts.headers[key]);
      });
    }
    var params = opts.params;
    if (params && typeof params === 'object') {
      params = Object.keys(params).map(function (key) {
        return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
      }).join('&');
    }
    xhr.send(params);
  });
}

Versi ini menawarkan lebih fleksibiliti dalam membuat permintaan XHR, membolehkan anda menentukan parameter dan pengepala tersuai.

Kesimpulannya, menjanjikan permintaan XHR menggunakan janji asli ialah pendekatan mudah yang meningkatkan fleksibiliti dan kebolehkomposisian kod bahagian hadapan anda. Ia memberi kuasa kepada anda untuk membuat permintaan XHR tak segerak dengan mudah, merantainya dan mengendalikan ralat dengan berkesan. Dengan memanfaatkan konsep yang dibincangkan dalam artikel ini, anda boleh membuka kunci potensi janji asli untuk pembangunan aplikasi bahagian hadapan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memudahkan Permintaan XHR Asli Menggunakan Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn