Siehe Rookie Fehler # 4 konvertieren: mit „latenten“ in Nolan Lawson ‚s-Artikel: (! Btw einen großen Beitrag) We have a problem with promises, ich versuche nicht aufgeschobenes Stil Versprechen zu verwenden nicht mehr. Kürzlich bin ich auf ein praktisches Beispiel gestoßen, dass ich nicht herausfinden kann, wie ich das NICHT verzögert schreiben kann, also brauche ich ein paar Ratschläge. HierWie diese latenten Stil Versprechen ES6 Stil Versprechen
ist das Beispiel, eine Winkel Fabrik:
function ConfirmModal($q, $modal) {
return {
showModal: function _showModal(options) {
var _modal = $modal(options)
var deferred = $q.defer()
_modalScope.confirm = function(result) {
deferred.resolve(result)
_modal.hide()
}
_modalScope.cancel = function(reason) {
deferred.reject(reason)
_modal.hide()
}
return deferred.promise
}
}
}
Ich verstecke einige unabhängige Details, die Kernidee ist (zB Implementierung von _modalScope
.): $modal
bieten eine ui Widget, das mit zwei Tasten enthält: Bestätigen und Abbrechen. Wenn Bestätigen Sie wurde angeklickt, Anruf _modalScope.confirm
und die verzögerte Zusage auflösen, andernfalls lehnen die verzögerte Zusage durch den Aufruf _modalScope.cancel
, wenn Abbrechen wurde geklickt.
Ich habe versucht, mithilfe von return $q(function(resolve, reject) { ... })
neu zu schreiben, aber ich weiß wirklich nicht, wie/wann resolve
und reject
in diesem Konstruktor aufzurufen, weil die wirkliche Logik in der _modalScope.confirm/cancel
Methode. Ich habe tagelang mit diesem Problem zu kämpfen, hoffe wirklich, dass mir jemand helfen kann.
Danke!
In der Tat, Sie sind die [latenten Antipattern] nicht verwenden (http : //stackoverflow.com/q/23803743/1048572) hier, denn '$ modal' ist noch kein Versprechen api. Zurückgestellte sind völlig in Ordnung, um Dinge zu promitifizieren! – Bergi
@Bergi oh, ziemlich Punkt, ich habe das nicht erkannt, danke! – nightire