Я работаю через старый код, работающий с сетевыми запросами, используя библиотеку RPC / YUI. По сути, он создает теги для обработки сетевых запросов. Для них нет никаких обещаний. Кроме того, из-за поддержки IE11 мы не можем использовать нативный объект Promise. Наш процесс сборки не использует никаких зависимостей от NPM, поэтому мы не можем использовать какие-либо связанные с babel полифилы.
Существует ошибка, над которой я работаю, чтобы исправить то, что аргумент ignoreError
перезаписывается каждый раз, когда другая функция вызывает ту же функцию .... очевидно! У нас есть несколько функций, вызывающих эту библиотеку функций сетевого запроса. Иногда мы хотим игнорировать ошибку, иногда нет.
Каков идеальный способ хранения нескольких сделанных запросов и соответствующих им обратных вызовов с ошибками, чтобы вызывался соответствующий элемент?
пример:
var rpcUrl,
rpcRetries,
rpcIgnoreError;
// main function that sets some globals:
rpc: function(url, retries, ignoreError) {
rpcUrl = url;
rpcRetries = retries;
rpcIgnoreError = ignoreError;
this.doRpc();
},
// calls the YUI library to initialize network script:
doRpc: function() {
YAHOO.util.Get.script(rpcUrl, {
onFailure: function() {
this.callbackError(true);
},
timeout: 55000
});
},
// YUI callback
callbackError: function(retry) {
if (retry && rpcRetries > 0) {
rpcRetries = rpcRetries - 1;
this.doRpc();
} else {
// ** how do i know this error handling is for the script which failed?
if (!rpcIgnoreError) {
this.populateFormStatus(6);
}
}
},
Теперь у нас есть несколько функций, вызывающих rpc()
, таких как:
sendConfig: function() {
this.rpc(urlForEndpoint, 3, true);
},
sendUser: function() {
this.rpc(urlForEndpoint, 3, false);
},
sendWidget: function() {
this.rpc(urlForEndpoint, 3, false);
},
Я обеспокоен тем, что создание массива обратных вызовов не гарантирует, что каждый элемент обрабатывается соответствующим обработчиком.
Я мог бы сделать что-то вроде создания константы карты:
var RPC_ERR_CB = {
sendConfig: false,
sendUser: true,
sendWidget: true
};
// а затем в обратном вызове onFailure
я могу прочитать src
тега script:
...
doRpc: function() {
YAHOO.util.Get.script(rpcUrl, {
onFailure: function() {
var hasCB = Object.keys(RPC_ERR_CB).some(function(item) {
return arguments[0].src.indexOf(RPC_ERR_CB[item]) <= 0;
});
if (hasCB) {
this.callbackError(true);
}
},
timeout: 55000
});
},
Надеюсь, это имеет смысл ... СПАСИБО!