2016-12-28 5 views
0

Unten skizziert ein Versprechen, das zwei einfache Schritte auf der Konsole etwas anzuzeigen, dann etwas anderes anzeigen, nachdem der erste Schritt abgeschlossen ist.Auflösen eines JavaScript-Versprechens

Ich versuche zu verstehen, wie das Versprechen zu lösen, und den zweiten Schritt zu vervollständigen.

var lookup_documents = new Promise(
    function(resolve, reject) { 
     console.log("1st"); 
     //resolve(); - How do I do this outside of this function? 
    } 

); 

lookup_documents.then(
    function() { 
     console.log("2nd"); 
    } 
); 
+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –

+0

Was meinst du mit „außerhalb der Funktion“? Du solltest nicht. Mach einfach den ersten Schritt innerhalb dieser Funktion. – Bergi

Antwort

0

Normalerweise verwenden Sie new Promise(), wenn Sie einige asynchrone Funktion in ein Versprechen wickeln wollen, wie zum Beispiel:

new Promise((resolve, reject) => { 
    makeAjaxCall((err, data) => { 
     if(err) return reject(err); 
     else return resolve(data); 
    }) 
}); 

Es gibt andere Versprechen Implementierungen, wie q, wo Sie eine „latente erstellen "Objekt, das ein Versprechen zurückgibt ... Etwas ähnliches wäre:

function makeAjaxCallPromise() { 
    let deferred = Q.defer(); 
    makeAjaxCall((err, data) => { 
     if(err) return deferred.reject(err); 
     else return deferred.resolve(data); 
    }); 
    return deferred.promise; 
} 

Für die spezifische Sache, die Sie wollen ... Alles, was ich denken kann, ist zu erklären eine Variable außerhalb des Funktionsumfangs Versprechen und asign es, so etwas wie:

let resolver, rejecter; 
new Promise((resolve, reject) => { 
    resolver = resolve; 
    rejecter = reject; 
}); 
makeAjaxCall((err, data) => { 
    if(err) return resolver(err); 
    else return rejecter(data); 
}); 

Aber das sieht nicht allzu gut und zu Fehlern führen kann ... Versuchen Sie, alles in Ihrer Versprechen Funktion zu wickeln.

0

Sie können es so machen, mit Ihrem Beispiel - wenn ich Sie richtig verstehe.

var lookup_documents = function() { 
    return new Promise(function(resolve, reject) { 
    console.log("1st"); 
    resolve(); 
    }); 
}; 

lookup_documents().then(function() { 
    console.log("2nd"); 
}); 
+0

Das ist perfekt, hat gut funktioniert. Um dies weiter zu verdeutlichen, habe ich versucht, eine Funktion im ersten Teil des Versprechens aufzurufen, die einen API-Aufruf ausgeführt hat und den ersten Teil des Versprechens nach Abschluss der API (in einer separaten Funktion) auflösen wollte. –

+0

Konntest du das herausfinden? Ansonsten kann ich meine Antwort mit einer Lösung dafür ändern. –

+0

Ich nahm den obigen Vorschlag und legte die API in den ersten Teil des Versprechens, dann lösen Sie es nach Abschluss des API-Aufrufs. Um den API-Aufruf zu initiieren, verwende ich den zweiten Codeabschnitt, der hier bereitgestellt wird, mit eingefügten Befehlen, die basierend auf einer erfolgreichen Auflösung des ersten Teils des Versprechens ausgeführt werden. - Danke, das hat meinen Tag gemacht! –

Verwandte Themen