我有一个与本地服务连接的网站,该服务管理带有密码键盘的读卡器。使用此设备可以完成许多不同的操作。下面是其中之一的示例:
- 锁定设备
- 询问 PIN 码
- 释放装置
之前我曾经将回调相互链接,但现在,因为有新的操作,也使用“锁定”和“释放”等方法,我需要更改我的代码,以便第 1 步和第 3 步的代码是可重复使用的。
我一直在尝试使用 jQuery 承诺来解决这个问题,但我对此很陌生,而且我还没有真正弄清楚它们是如何工作的。有人可以帮帮我吗?
这是我现在使用的代码示例。我已经从函数内部删除了业务逻辑,以简化示例:
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
});
}
};