2016-05-15 11 views
0

In NodeJS wickle ich eine Versprechen-Funktion, um eine statische Variable zurückzugeben. Ich bin mir sicher, dass es einen besseren Weg gibt, aber ich konnte es nicht auf Qs docs finden. Dies funktioniert jedoch die Q.Promise scheint überflüssig:Einen statischen Wert als Versprechen zurückgeben

function parseXML(filepath) { 
    return Q.Promise(function (resolve, reject, notify) { 

     readXML(filepath).then(function (xml) { 

     ... (long synchronised code)... 

     //console.log('products -> ', products); 
     resolve(products); 

    }).catch(function (err) { 
     reject(err); 
    }); 
}); 
} 

In Angular würde ich $ Frage: Wann aber innerhalb der Q-Bibliothek verwenden „wenn“ scheint eine andere Rolle zu spielen, wie ich sie verstehe. Ich vermisse sicherlich eine "wann" -Methode. Dies ist, was würde Ich mag Lage sein zu tun:

function parseXML(filepath) { 
    readXML(filepath).then(function (xml) { 

     ... 

     // some Q method to create a fulfilled promise 
     Q.???(products); 

    }); 

} 
+0

Sie müssen 'Rückkehr ReadXml (filepath)' von 'parseXML '. Sobald eine Funktion eine Verheißung verwendet, wird sie zu einer Verheißung (solange Sie eine Verheißung von innen zurückgeben) und in Ihrem Fall würde 'parseXML' dann 'thenable' werden. – Wainage

+0

Aber muss ich eine Q.Promise wie das erste Beispiel erstellen Oder gibt es eine Möglichkeit, die Variable "products" zurückzugeben, ohne die Methode mit Q.Promise zu umhüllen? – Guy

+0

Nein. Sobald Sie versprechen/asynchron gehen, können Sie nicht synchronisieren gehen. Der Versuch, zu enden, wird in Tränen enden. Ich kann Ihr Beispiel in einer Antwort konkretisieren, wenn es nicht klar ist. – Wainage

Antwort

1

Sowohl in Winkel- und Knoten, dies ausreichend sein sollte:

function parseXML(filepath) { 
    return readXML(filepath).then(function(xml) { 
     ... (long synchronised code)... 
     return products 
    }); 
} 
Verwandte Themen