Ich habe eine Frage zu Dojo/Deferred. Ich beginne mit der Frage, gehe dann genauer auf das ein, was ich mache:Wie kann allgemeiner Code ausgeführt werden, nachdem ein verzögertes Dojo-Objekt aufgelöst oder zurückgewiesen wurde?
Gibt es eine Möglichkeit, die gleichen Codezeilen auszuführen, unabhängig vom Ergebnis der zurückgestellten, wie ein finally
Block in eine try...catch
Aussage? Nach dem, was ich gelesen habe, scheint es nicht so zu sein, aber vielleicht verstehe ich die Dokumentation falsch und wollte das mit der SO-Community bestätigen.
Hier ist, was ich tue:
In Dojo 1.9 (funktioniert auch in 1.8), habe ich eine dojox.widget.Standby (ein Laden Overlay) für eine ContentPane instanziiert, bevor einige Daten geladen werden. Sobald der verzögerte Anruf beendet ist, möchte ich mein Overlay wie unten gezeigt ausblenden:
standby = new Standby({
... // standby props
});
this.addChild(standby);
standby.show();
queryResults = grid.store.query({
... // query props
});
queryResults.then(function (results) {
if (results) {
... // do something
}
standby.hide();
}, function (error) {
... // handle error
standby.hide();
});
Das funktioniert gut; Ich könnte jedoch vermutlich einen Prozess implementieren, der nach dem verzögerten Abschluss implementiert wird, der mehrere Codezeilen anstatt nur einer einzigen Zeile einnimmt, und ich möchte diese Codezeilen nicht duplizieren. Eine Alternative wäre, eine private Funktion zu erstellen und sie einfach mit einem Einzeiler in jedem Block anzurufen, aber wenn es einen besseren Weg gibt, würde ich lieber diesen Weg nehmen.
Vielen Dank im Voraus!
Sie und @Lucas haben meine Frage, da beide Ihre Antworten sind richtig beantwortet. Ich habe @Lucas die "beste Antwort" gegeben, weil ich denke, dass "immer" eine klarere Absicht darstellt als ein zusätzliches "dann". Aber ich habe deine Antwort für ihre Richtigkeit hochgestimmt. – David