Ich habe diese Website, die sich mit einem lokalen Dienst verbindet, der einen CardReader mit einem PIN-Pad verwaltet. Es gibt viele verschiedene Operationen, die mit diesem Gerät ausgeführt werden können. ein Beispiel für eine von ihnen Heres:So verwalten Sie verkettete AJAX-Anrufe mit jQuery
- Sperren des Geräts
- für PIN-Nummer fragen
- Ausrückvorrichtung
Bevor ich zur Kette verwendet, um die Rückrufe untereinander, aber jetzt, da Es gibt neue Operationen, die auch Methoden wie "lock" und "release" verwenden. Ich muss meinen Code ändern, damit der Code für Schritt 1 und 3 wiederverwendbar ist.
Ich habe versucht, dies mit jQuery Versprechen zu lösen, aber ich bin ganz neu in dieser und ich habe noch wirklich herausgefunden, wie sie funktionieren. Kann mir jemand helfen?
Dies ist ein Beispiel für den Code, der jetzt verwendet wird. Ich habe die Geschäftslogik aus dem Innern der Funktionen entfernt, um das Beispiel zu vereinfachen:
var CardReader = {
////////////////////
// Different possible messages to the Card Reader
////////////////////
lockDevice: function() {
this.makeAjaxCall("GET", "/LockDevice", this.lockDeviceCallback);
},
getPin: function() {
this.makeAjaxCall("POST", "/getPin", this.getPinCallback);
},
releaseDevice: function() {
this.makeAjaxCall("POST", "/Release", this.releaseDeviceCallback);
},
//////////////////
// Callbacks for each message to the Card Reader
//////////////////
lockDeviceCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
this.getCardLogin();
},
getCardLoginCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
this.releaseDevice();
},
releaseDeviceCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
//End
},
////////////////
// Other methods
////////////////
init: function() {
// UI BIndings
$(#button).on("click", this.logIn.bind(this));
},
logIn: function() {
this.lockDevice();
},
makeAjaxCall: function(callType, resource, callbackMethod) {
$.ajax({
type : callType,
url : "http://localhost:1337" + resource,
cache : false,
dataType : "json",
contentType: "application/json",
context : this,
complete : callbackMethod
});
}
};