Ich erhalte ein Formular (über XMPP, XEP-0004), erstelle einen interaktiven Formulardialog dafür und sende dann das Formular, wenn der Dialog geschlossen wird.Wie man Versprechungen in einem interaktiven Anruf verwendet?
Der Code (etwa der Einfachheit halber angenähert):
function form(name, callback) {
server.getForm(name, function(response) {
callback(response.formFields, function (data) {
server.submitForm(name, data);
});
});
}
function main() {
form('example', function(fields, callback) {
var dialog = ui.formDialog(fields);
dialog.addButton('submit', function(data) {
callback(data);
});
dialog.show();
});
}
Beachten Sie, wie der Anrufer und Angerufenen Austausch Rückrufe - in eine Richtung, für die Felder vom Server abgerufen; in der anderen für die vom Benutzer eingereichten Daten.
Ich habe kürzlich JS Promises entdeckt und ich würde gerne wissen, ob sie die Callbacks eleganter ersetzen könnten.
Ich habe so weit wie:
function form(name) {
return new Promise((resolve, reject) => {
server.getForm(
name,
(response) => { resolve(response.formFields) },
reject
);
});
}
function main() {
form('example').then((fields) => {
var dialog = ui.formDialog(fields);
dialog.addButton('submit', /* ... */);
});
}
Aber jetzt stecken Ich bin, weil ich keine Möglichkeit haben, die Veranstaltungs-Taste, um den Anruf form()
einreichen zurücklaufen.
Ich kann nicht einfach ein Versprechen für den Dialog entweder erstellen, weil ich zuerst dieses Versprechen erstellen musste, um es an form()
zu übergeben, aber ich muss das Versprechen von form()
aufgelöst werden, bevor ich erstellen kann der Dialog. Es gibt eine Art Bootstrap-Problem.
Gibt es eine Möglichkeit, Versprechungen hier zu verwenden, oder sollte ich mit der Weitergabe von Callbacks fortfahren?