2017-05-20 7 views
0

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); 
} 

Antwort

0

Dies bedeutet, dass der Wert von storypromise holen, wenn es ist anders definiert, gehe zum Aufruf der Methode getjson() und weise den von dort zurückgegebenen Wert zu. Dies ist eine gängige Praxis in vielen anderen Sprachen. Die Operanden von 'oder' können Variablen oder Methoden sein.

Verwandte Themen