2017-08-10 1 views
0

Ich habe ein kleines Problem mit einem Fehler bei Versprechungen. Also zunächst hatte ich meine Funktion so eingerichtet, und alles hat gut funktioniert, keine Probleme.Async-/Warteverzug ausstehend Fehler

Original:

const request = require("request-promise"); 
async() => { 
    const URL_HIDDEN = "..."; 

    let info = await request(URL_HIDDEN); 
    info = JSON.parse(info).response.players[0]; 

    let playtime = await request(URL_HIDDEN); 
    playtime = JSON.parse(playtime).response.games; 

    console.log(info); 
    console.log(playtime); 
} 

Dies ist eine verkürzte Version, aber im Grunde bin ich nur Informationen aus dem Steam-API anfordert. Beide Variablen werden mit allen Daten ausgedruckt, kein Problem, aber das ändert sich, sobald ich den Refactor unten mache.

überarbeitete: in einer separaten Funktion in einer separaten Datei Handhabung

const middleware = require("../middleware"); 
async() => { 
    const URL_HIDDEN = "..."; 

    let requests = middleware.requestURI(URL_HIDDEN); 
    console.log(requests); 
} 

und ich begann die ganze Anfrage zu tun.

Sobald ich alle Variablen aussortiert habe, möchte ich ein Array zurückgeben. Sobald dies ausgeführt wurde, bekomme ich das auf die Konsole gedruckt.

1 
Promise { <pending> } 
2 
3 

Jede Idee, warum es Promise Druck einmal anhängige ich es Refactoring?

In der ursprünglichen druckt er alles völlig in Ordnung

+0

so was ist das Problem? – Ivan

+1

Anstatt zu protokollieren, was tatsächlich im Array ist, werden nur die ausstehenden Versprechen ausgedruckt. Es gibt eine Menge Informationen in jeder Variablen im Array – Phillip

+1

, da 'requestURI'' async' ist und nicht abgeschlossen wird, wenn 'console.log (requests)' ausgeführt wurde – Ivan

Antwort

2

in Ihrem "Überarbeitete" Code aus -

let requests = middleware.requestURI(URL_HIDDEN); 

ohne await, requests wird eine anhängige Versprechen sein - so, was Sie brauchen

let requests = await middleware.requestURI(URL_HIDDEN); 

Um dies zu erweitern. Jede Funktion, die mit async gekennzeichnet ist, gibt eine Versprechung zurück.

async function foo() { 
    return true; 
} 

Aufruf dieses wie

let bar = foo(); 
// here bar = pending promise of foo() 

Ergebnisse in bar Das Versprechen ist

es wie

let bar = await foo(); 
// here bar == true 
Aufruf

ist eine Art Äquivalent (aber bei weitem nicht gleich)

foo().then(bar => { 
    // here bar == true 
}) 

async/await können Code machen, die bereits von Promise vereinfacht wird noch einfacher - in diesem konstruiertes Beispiel, es ist nicht klar, obwohl

+0

Ich war mir nicht bewusst Ich musste auf die Funktion warten, die aufgerufen wird, um die Anfragen zu bearbeiten. Gut zu wissen – Phillip

+0

Vielen Dank für Ihre Korrektur :)! – Phillip

Verwandte Themen