Ich habe noch nicht ganz ein vollständiges Verständnis der Versprechungen so Entschuldigungen, wenn das ein einfaches Missverständnis ist.Wie man bedingte (?) Versprechungen mit Q.js richtig kettet
Ich habe eine Funktion zum Löschen eines Elements auf einer Seite, aber ich habe ein bestimmtes Verhalten je nach dem Zustand der Seite. Psuedo Code-weise ist es so etwas wie folgt:
Hoffentlich macht das Sinn. Im Wesentlichen, wenn Änderungen vorliegen, müssen die Daten zuerst gespeichert werden. Wenn die Daten gespeichert wurden oder wenn anfangs keine Änderungen vorgenommen wurden, wird der Benutzer aufgefordert, den Löschvorgang zu bestätigen. Das Problem ist, dass ich Durandal und Brise benutze, und ich kann die Versprechen, die sie zusammenbringen, nicht korrekt verketten.
Meine Funktion sieht derzeit so aus, was ich weiß, ist falsch, aber ich kämpfe, um herauszufinden, wo es zu beheben ist.
if (this.hasChanges()) {
app.showMessage('Changes must be saved before removing external accounts. Would you like to save your changes now?', 'Unsaved Changes...', ['Yes', 'No'])
.then(function (selectedOption) {
if (selectedOption === 'Yes') {
return this.save();
} else {
Q.resolve()
}
});
}
app.showMessage('Are you sure you want to delete this item?', 'Delete?', ['Yes', 'No'])
.then(function (selectedOption) {
if (selectedOption === 'Yes') {
item.entityAspect.setDeleted();
datacontext.saveChanges()
.then(function() {
logger.logNotificationInfo('Item deleted.', '', router.activeInstruction().config.moduleId);
Q.resolve(this.refresh(true));
}.bind(this));
}
}.bind(this));
Der app.showMessage Anruf von durandal gibt ein Versprechen, dann ist die this.save gibt ein Versprechen, und schließlich die This.Refresh gibt auch ein Versprechen.
Also ich denke, ich muss die hasChanges überprüfen, dann bei Bedarf aufrufen speichern und lösen. Nachdem der bedingte Abschnitt die Auflösung beendet hat, rufen Sie die zweite Eingabeaufforderung auf und lösen Sie alle darin enthaltenen Versprechen.
Es tut mir leid, ich glaube nicht, dass das super klar ist, aber das ist auch, denke ich, dass ich hier nicht ganz den Ketten folge.
Jede Hilfe sehr geschätzt! Vielen Dank.
Ich habe dies als die Antwort markiert, weil ich im Grunde genommen all diesen Code verwendet, aber die Antwort von allen war im Wesentlichen richtig, soweit ich sehen konnte. – Adam
In Bezug auf diese Konvention weiß ich, dass das "Muster" so ist, wie es gemacht werden soll, aber leider habe ich eine Situation gefunden, in der ich das Selbst und die Schließungen nicht richtig funktionieren lassen konnte. Dann habe ich es repariert, nachdem ich etwas über Bind herausgefunden hatte, und es blieb einfach hängen, weil es funktionierte. Nicht gut. – Adam