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
Lepaskan: 2024-12-07 07:50:13
asal
280 orang telah melayarinya

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();
}
Salin selepas log masuk

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();
  });
}
Salin selepas log masuk

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);
  });
Salin selepas log masuk

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,
}
Salin selepas log masuk

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);
  });
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan