Maison > interface Web > js tutoriel > Comment les promesses peuvent-elles simplifier les requêtes XHR asynchrones en JavaScript ?

Comment les promesses peuvent-elles simplifier les requêtes XHR asynchrones en JavaScript ?

Susan Sarandon
Libérer: 2024-12-06 20:14:16
original
594 Les gens l'ont consulté

How Can Promises Simplify Asynchronous XHR Requests in JavaScript?

Comment les promesses permettent la programmation asynchrone avec XHR natif

Lorsque vous travaillez avec XHR dans une application frontale, il est souvent souhaitable d'utiliser des promesses pour une programmation asynchrone rationalisée. programmation. Cependant, la mise en œuvre du XHR promis sans un cadre volumineux peut s'avérer difficile.

Comprendre le XHR natif

Avant d'aborder la promesse, voyons comment effectuer une requête XHR de base à l'aide de rappels. :

function makeRequest(method, url, done) {
  const xhr = new XMLHttpRequest();
  xhr.open(method, url);
  xhr.onload = function() {
    done(null, xhr.response);
  };
  xhr.onerror = function() {
    done(xhr.response);
  };
  xhr.send();
}
Copier après la connexion

Présentation des promesses avec XHR

Pour promettre le XHR natif, nous exploitons le constructeur Promise :

function makeRequest(method, url) {
  return new Promise(function(resolve, reject) {
    const 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();
  });
}
Copier après la connexion

Maintenant, nous pouvons enchaîner et gérer de manière transparente les requêtes XHR asynchrones à l'aide de .then() et .catch ():

makeRequest('GET', 'http://example.com')
  .then(function(datums) {
    console.log(datums);
  })
  .catch(function(err) {
    console.error('Augh, there was an error!', err.statusText);
  });
Copier après la connexion

Amélioré Fonctionnalité

Nous pouvons encore améliorer la fonction makeRequest en acceptant un objet d'options personnalisable :

function makeRequest(opts) {
  return new Promise(function(resolve, reject) {
    // ... (code remains similar to previous example) ...
  });
}
Copier après la connexion

Cela nous permet de spécifier des paramètres tels que les données POST/PUT et les en-têtes personnalisés :

makeRequest({
  method: 'GET',
  url: 'http://example.com',
  params: {
    score: 9001
  },
  headers: {
    'X-Subliminal-Message': 'Upvote-this-answer'
  }
});
Copier après la connexion

En conclusion, le prometteur XHR natif offre un moyen puissant pour simplifier et améliorer la programmation asynchrone dans vos applications frontend. L'utilisation du constructeur Promise avec des options personnalisables offre une approche flexible et efficace pour gérer les demandes XHR.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal