Wie konvertiere ich eine vorhandene callback-API verspricht?

Will ich arbeiten, mit dem Versprechen aber ich habe ein callback-API in einem format wie diesem:

1. DOM-laden, der eine oder andere Zeit-Ereignis:

window.onload; //set to callback
...
window.onload = function() {

};

2. Plain callback:

function request(onChangeHandler) {
    ...
}
request(function() {
    //change happened
    ...
});

3. Knoten-Stil callback ("nodeback"):

function getStuff(dat, callback) {
    ...
}
getStuff("dataParam", function(err, data) {
    ...
})

4. Eine ganze Bibliothek mit Knoten-Stil-Rückrufe:

API;
API.one(function(err, data) {
    API.two(function(err, data2) {
        API.three(function(err, data3) {
            ...
        });
    });
});

Wie arbeite ich mit der API in Versprechungen, wie kann ich "promisify"?

Ich habe meine eigene Antwort, sondern Antworten erweitern, wie dies für eine bestimmte Bibliothek oder in mehr Umstände und Bearbeitungen sind auch sehr willkommen.
Das ist eine interessante Idee, die ich habe versucht, eine Allgemeine Antwort, die verwendet zwei gängige Ansätze (Versprechen Konstruktor und deferred-Objekt). Ich versuchte die beiden alternativen Antworten. Ich bin damit einverstanden, dass RTFMing löst dieses Problem, aber wir laufen in dieses Problem oft hier und im bug-tracker, so dass ich dachte, eine 'kanonische Frage' ist vorhanden - ich denke, RTFMing löst über 50% der Themen in der JS-tag :D, Wenn Sie einen interessanten Einblick dazu beitragen, eine Antwort oder Bearbeiten, es wäre sehr geschätzt.
Nicht die Schaffung eines new Promise hinzufügen keine signifikante overhead? Ich bin zu wollen, wickeln Sie alle meine synchron Noje.js Funktionen in ein Versprechen, so entfernen Sie alle synchronous code von meinem Knoten app, aber ist dies beste Praxis? In anderen Worten, eine Funktion akzeptiert eine statische argument(z.B. eine Zeichenkette) und gibt ein Ergebnis der Berechnung, sollte ich wickeln, dass in einem Versprechen? ...Ich habe irgendwo gelesen, dass Sie sollten nicht jede synchronous code in Nodejs.
Nein, es ist nicht eine gute Idee, um wrap-synchrone Aufrufe mit dem Versprechen - nur asynchrone Aufrufe durchführen können I/O

InformationsquelleAutor Benjamin Gruenbaum | 2014-03-19

Schreibe einen Kommentar