Synkroniset ja asynkroniset pyynnöt

joulu 22, 2021
admin

Joskus sinun on luettava monia ulkoisia tiedostoja. Tämä on vakiotoiminto, joka käyttää XMLHttpRequest-objektia asynkronisesti vaihtaakseen luetun tiedoston sisällön määritellylle kuuntelijalle.

function xhrSuccess() { this.callback.apply(this, this.arguments);}function xhrError() { console.error(this.statusText);}function loadFile(url, callback /*, opt_arg1, opt_arg2, ... */) { var xhr = new XMLHttpRequest(); xhr.callback = callback; xhr.arguments = Array.prototype.slice.call(arguments, 2); xhr.onload = xhrSuccess; xhr.onerror = xhrError; xhr.open("GET", url, true); xhr.send(null);}

Käyttö:

function showMessage(message) { console.log(message + this.responseText);}loadFile("message.txt", showMessage, "New message!\n\n");

Hyödykefunktion loadFile allekirjoituksessa ilmoitetaan (i) kohde-URL-osoite, joka luetaan (HTTP GET-pyynnön kautta), (ii) funktio, joka suoritetaan XHR-operaation onnistuessa ja (iii) mielivaltainen luettelo lisäargumenteista, jotka välitetään XHR-olion kautta (arguments-ominaisuuden arguments välityksellä) onnistumisen takaisinkutsufunktiolle.

Rivillä 1 ilmoitetaan funktio, joka kutsutaan, kun XHR-operaatio suoritetaan onnistuneesti loppuun. Se puolestaan kutsuu kutsufunktiota, joka on määritetty XHR-objektin ominaisuuteen (rivi 11) määritetyn loadFile-funktion kutsussa (tässä tapauksessa funktio showMessage). Funktio loadFile:n kutsuun annetut lisäargumentit (jos sellaisia on) ”sovelletaan” takaisinkutsufunktion suorittamiseen.

Rivillä 5 ilmoitetaan funktio, jota kutsutaan, kun XHR-operaatio epäonnistuu onnistuneesti.

Rivillä 11 tallennetaan onnistumisen takaisinkutsu (success callback), joka annettiin toisena argumenttina funktiolle loadFile, XHR-olion callback-ominaisuuteen.

Rivillä 12 viipaloidaan argumenttikenttä (arguments array), joka annettiin funktiota kutsuttaessa funktiota loadFile. Kolmannesta argumentista alkaen kaikki loput argumentit kerätään, osoitetaan muuttujan xhr argumentit-ominaisuuteen, siirretään onnistumisen takaisinkutsufunktiolle xhrSuccess. ja lopulta toimitetaan takaisinkutsufunktiolle (tässä tapauksessa showMessage), joka kutsutaan funktiolla xhrSuccess.

Rivi 15 määrittää kolmanneksi parametrikseen true:n osoittaakseen, että pyyntöä tulisi käsitellä asynkronisesti.

Rivi 16 itse asiassa panee pyynnön alulle.

Vastaa

Sähköpostiosoitettasi ei julkaista.