Ich verfolge ein Tutorial über Versprechungen und stieß auf die folgende Verwendung von Versprechungen mit logischen Operatoren, die ich nicht ganz nachvollziehen kann. Im folgenden Beispiel gibt es eine Funktion getJSON
, die ein Versprechen zurückgibt. Und es ist mit einer nichtinitialisierten Variablen storyPromise
unter Verwendung ||
(logischer ODER ??) Operator wiederholt verbunden (storyPromise = storyPromise || getJSON('story.json');
). Ich bin mir nicht sicher, was es bedeutet, eine Variable mit einem Versprechen OR
, vor allem am Anfang, wenn die Variable undefined
ist.Wie funktionieren logische Operatoren mit Promises in Javascript?
Kann jemand bitte helfen, die Logik/den Arbeitsablauf für die betreffende Linie zu erklären? Wie funktioniert ein Versprechen mit Booleschen Variablen?
(ich weiß sehr einfach Javascript aber nicht moderne Funktionen wie Versprechungen)
var storyPromise;
function getChapter(i) {
storyPromise = storyPromise || getJSON('story.json');
return storyPromise.then(function(story) {
return getJSON(story.chapterUrls[i]);
})
}
// and using it is simple:
getChapter(0).then(function(chapter) {
console.log(chapter);
return getChapter(1);
}).then(function(chapter) {
console.log(chapter);
})
Die getJSON()
Funktion wie folgt definiert ist:
function get(url) {
// Return a new promise.
return new Promise(function(resolve, reject) {
// Do the usual XHR stuff
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function() {
// This is called even on 404 etc
// so check the status
if (req.status == 200) {
// Resolve the promise with the response text
resolve(req.response);
}
else {
// Otherwise reject with the status text
// which will hopefully be a meaningful error
reject(Error(req.statusText));
}
};
// Handle network errors
req.onerror = function() {
reject(Error("Network Error"));
};
// Make the request
req.send();
});
}
function getJSON(url) {
return get(url).then(JSON.parse);
}