У меня есть веб-сервиса, который может принимать определенные параметры, как таковой,? Наверху = 5 & OrderBy = столбец --- и т.д ...Javascript сглаживающий метод цепочки
Я хочу, чтобы иметь возможность выполнить свой объект, как, например :
var call = new API();
call.get().top(5).skip(15).orderby("address");
Задача состоит в том, чтобы только последний порядок запуска запускал метод execute(). Вот мой код. Пожалуйста, дайте мне знать, если у вас есть идеи! В настоящее время он задерживается на 25 мс, когда заканчивается каждая функция, и останавливает таймер при запуске следующей функции. Является ли это правильным/приемлемым?
var API = function (webservice) {
this.webservice(webservice);
return this;
};
API.prototype = {
version: function (urlFormat) {
if (urlFormat) {
return "v" + urlFormat.split('.').join('_');
}
return sessionStorage.getItem("version");
},
path: function() {
return "../WebAPI/";
},
execute: function() {
var path = this.path() + this.webservice() + ".svc/";
if (this.__parameters) {
path += "?";
}
var first = true;
for (var k in this.__parameters) {
if (k !== "type")
path += ((first) ? (function(){first = false; return ""})() : "&") + "$" + k + "=" + this.__parameters[k];
};
console.log(this.__parameters.type + ": " + path);
return this;
},
put: function() {
this.doIt("type","put");
return this;
},
post: function() {
this.doIt("type","post");
return this;
},
get: function() {
this.doIt("type","get");
return this;
},
delete: function() {
this.doIt("type","delete");
return this;
},
toString: function() {
return "API";
},
webservice: function(webservice) {
if (webservice) {
this.__webservice = webservice;
}
else {
return this.__webservice;
}
},
top: function (p) {
this.doIt("top",p);
return this;
},
view: function (p) {
this.doIt("view",p);
return this;
},
orderby: function (p) {
this.doIt("orderby",p);
return this;
},
criteria: function (p) {
this.doIt("criteria",p);
return this;
},
skip: function (p) {
this.doIt("skip",p);
return this;
},
filter: function (p) {
this.doIt("filter",p);
return this;
},
doIt: function (method, parameter) {
this.__timerStop();
this.__parameters[method] = parameter;
this.__timerStart();
},
__timerStop: function() {
if (this.__timer) {
clearTimeout(this.__timer);
}
},
__timerStart: function (append) {
var self = this;
if (this.__timer) {
this.__timerStop();
}
this.__timer = setTimeout(function() {
console.log("executing.");
console.log(JSON.stringify(self.__parameters));
self.execute();
}, 25);
},
__parameters: {}
};
Мне не нравится идея волшебного исполнения.Либо вы выполняете после каждого вызова метода, либо программист должен явно выполнить вызов. Я никогда не видел этого отсроченного исполнения раньше, и это дает мне крипы. – Styxxy