2017-03-22 5 views
0

Wie pausiert man seine Javascript-Funktion, bis ein Versprechen (in diesem Fall des OAuth2) erfüllt ist, damit ich die Weiterleitungs-URL bekommen kann, die es zurückgeben sollte?Warte auf Versprechen erfüllt (Javascript)

Verwenden von regulären JS in einem Firefox WebExtension, neueste Firefox-Entwickler (54.0a2)

function fetchOAuth2() 
{ 
    var redirectURL = browser.identity.getRedirectURL() + "page.html"; 
    console.log(redirectURL); 
    var clientID = "CLIENT ID"; 
    var authURL = "https://trakt.tv/oauth/authorize"; // API I'm using 
    authURL += `?response_type=code`; 
    authURL += `&client_id=${clientID}`; 
    authURL += `&redirect_uri=${redirectURL}`; 
    console.log(authURL); 
    var authorizationCode = browser.identity.launchWebAuthFlow({ 
     interactive: true, 
     url: authURL 
    }); 
} 

Antwort

0

läuft Es gibt verschiedene Ansätze, die gültig sind, so wählen Sie die Sie bevorzugen/passt mit Ihrem Code am besten.

Verwenden promise.then()

function fetchOAuth2() 
{ 
    var redirectURL = browser.identity.getRedirectURL() + "page.html"; 
    console.log(redirectURL); 
    var clientID = "CLIENT ID"; 
    var authURL = "https://trakt.tv/oauth/authorize"; // API I'm using 
    authURL += `?response_type=code`; 
    authURL += `&client_id=${clientID}`; 
    authURL += `&redirect_uri=${redirectURL}`; 
    console.log(authURL); 

    browser.identity.launchWebAuthFlow({ 
     interactive: true, 
     url: authURL 
    }) 
    .then(function(authResult) { 
     // do something with authResult 
    }) 
} 

Wenn Sie die authResult außerhalb dieser Funktion zugreifen möchten, dann müssen Sie das Versprechen, zurückzukehren, und then sie von der Aufrufstelle, dh

function fetchOAuth2() 
{ 
    var redirectURL = browser.identity.getRedirectURL() + "page.html"; 
    console.log(redirectURL); 
    var clientID = "CLIENT ID"; 
    var authURL = "https://trakt.tv/oauth/authorize"; // API I'm using 
    authURL += `?response_type=code`; 
    authURL += `&client_id=${clientID}`; 
    authURL += `&redirect_uri=${redirectURL}`; 
    console.log(authURL); 

    return browser.identity.launchWebAuthFlow({ 
     interactive: true, 
     url: authURL 
    }) 
} 

fetchOAuth2().then(function(authResult) { 
    // do something with auth result 
}); 

Verwenden ES7 async/erwarten

Dies ist eine relativ neue Sprachfunktion, wird jedoch in FF54 unterstützt. Wenn Sie andere Browser unterstützen müssen, müssen Sie Babel verwenden, um Kompatibilität zu ermöglichen.

async function fetchOAuth2() 
{ 
    var redirectURL = browser.identity.getRedirectURL() + "page.html"; 
    console.log(redirectURL); 
    var clientID = "CLIENT ID"; 
    var authURL = "https://trakt.tv/oauth/authorize"; // API I'm using 
    authURL += `?response_type=code`; 
    authURL += `&client_id=${clientID}`; 
    authURL += `&redirect_uri=${redirectURL}`; 
    console.log(authURL); 

    var authResult = await browser.identity.launchWebAuthFlow({ 
     interactive: true, 
     url: authURL 
    }); 

    // do something with authResult 
} 
+0

Vielen Dank für Ihre schnelle Antwort! Und danke für die vielen Möglichkeiten + Infos, immer gut zu wissen! Leider schien es nicht den Trick zu tun. Dies könnte eine Webextension-Sache sein (da browser.identity.launchWebAuthFlow() ein neues Fenster öffnet), aber aus irgendeinem Grund funktioniert keine dieser Lösungen. Ich habe immer einen Test nach warten/innerhalb der foo.then (console.log ("test")), aber es gibt keine Konsolenausgabe. Irgendwelche Ideen? – FStijn

+0

Suchen Sie nach Fehlern in der Konsole, aber verwenden Sie Strg + J, um die ** Browser ** -Konsole zu öffnen, sodass auch Fehler von Erweiterungen angezeigt werden. – trincot

+0

@trincot Alles, was ich bekam war: nicht erreichbaren Code nach return Anweisung in btgallery.js: 1: 52329 (nicht meiner, soweit ich weiß) ReferenceError: Ereignis ist nicht definiert pop.js: 4: 6264 (nicht meins entweder, soweit ich weiß) Nichts von meiner eigenen Anwendung, leider – FStijn

Verwandte Themen