{id:123459876, code:"frog"}
[{value:"water", contents:0}]
function makeRequest(reqMethod, navURL) {
return new Promise(function (resolve, reject) {
GM_xmlhttpRequest({
method: reqMethod,
url: navURL,
onload: function () {
if (this.status >= 200 && this.status < 300) {
resolve(this.response);
} else {
reject({
status: this.status,
statusText: this.statusText
});
}
},
onprogress: function(event) {
console.log(`Loaded ${event.loaded} of ${event.total}`);
},
onerror: function(data) {
reject({
status: this.status,
statusText: this.statusText
});
}
});
});
}
function makeRequestWrapper(requestMethod, navToURL, successFunction) {
makeRequest(requestMethod, navToURL)
.then(
function (datums) {
successFunction(datums);
}
)
.catch(
function (err) {
console.error('there was an error!', err.statusText);
}
);
}
// one of the 3 example handler methods for dealing with the success + JSON
function successHandler1(jsonDataResponse) {
let response = JSON.parse(jsonDataResponse);
let id = response[0].id;
let updateLink = document.getElementById("unique_link_id").parentNode.parentNode;
updateLink .innerHTML += ` ID: ${id} `;
}
然而,我的问题是,提取此JSON数据的脚本的一些用户将使Promise失败(一些用户比其他用户更频繁)--因此,我尝试的下一步分流是重试Promise一定次数,并且有延迟。这样,我想重试一个失败的promise,比方说3次,延迟3秒,应该会给你足够的尝试和时间来提高promise的成功率。
我的想法
因为我对JS相对来说是个新手(还在学习它,希望成为一门我可以在生活中使用的语言),我读过像promise和观察到的东西?并重新考虑我是否在正确的道路上解决这个问题。我想我需要一个深入的例子,具体到我的用例,并有一步一步的详细解释,以便不仅了解promise,而且了解这个用例场景。
我也看过无数的医生,比如;
下面是围绕makerequest()
函数的包装器,它允许传递最大重试次数和重试之间的延迟。它返回一个promise,如果成功就会解决,如果在MaxRetris之后仍然有错误就会拒绝。
function makeRequestRetry(requestMethod, navToURL, maxRetry = 3, retryDelay = 3000) {
let retryCnt = 0;
function delay(t) {
return new Promise(resolve => {
setTimeout(resolve, t);
});
}
function run() {
return makeRequest(requestMethod, navToURL).catch(function (err) {
++retryCnt;
if (retryCnt > maxRetry) {
console.error('Max retries exceeded. There was an error!', err.statusText);
throw err;
}
console.error('Retry #' + retryCnt + ' after error', err.statusText);
// call ourselves again after a short delay to do the retry
// add to the promise chain so still linked to the originally returned promise
return delay(retryDelay).then(run);
});
}
return run();
}
人们会这样称呼它:
makeRquestRetry('GET', someURL, 5, 5000).then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
或者,使用重试参数的默认值:
makeRquestRetry('GET', someURL).then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
问题内容: 我从一些现有的wsdl中生成了一些WebServices 我使用Maven来做到这一点,但是某些Web服务是通过 和其他人 Jaxb或xjc会自动执行吗?因为我在wsdls中没有任何区别… 问题答案: 当“操作”名称,“消息”名称和“元素”名称在某种形状或形式上不同时,就会生成BARE Web服务。要自动将您的客户端或服务存根生成为WRAPPED,这三个元素都必须相同。 解决方法是编写
上下文: 我正在使用spring-retry重试restTemplate调用。 restTemplate调用是从kafka侦听器调用的。kafka侦听器还被配置为在出错时重试(如果在过程中抛出任何异常,而不仅仅是restTemplate调用)。 目标: 当错误来自已耗尽的重试模板时,我想防止kafka重试。 实际行为: 当retryTemplate用尽所有重试时,将引发原始异常。从而阻止我识别Re
在android Studio上使用flutter构建我的应用程序,当我上传我的应用程序包(通过制作时,会弹出消息: 我已经尝试了目前在线的所有解决方案来解决这个问题。以下各项的每种组合: 这些解决方案: https://github.com/flutter/flutter/issues/60240#issuecomment-894683946 https://github.com/flutter
本机安装Sonarqube 下载 钉盘 - 网聚宝开发指南-资源 - Common 将Sonarqube.6.2.zip 下载到本机并解压。 安装mysql 去 钉盘 - 网聚宝开发指南-资源 根据你的系统下载对应 MySQL 安装包。 点开进行安装,记住安装好的时候 弹出的root 的密码。 进入系统偏好设置,点击mysql,开启mysql服务。 此时我们在命令行输入mysql -uroot -
有没有隐藏iOS键盘的简单方法?我想把它封闭在一些特定的场景中,这些场景不一定需要关注另一个视角。i、 e.像服务器的特定响应。
我需要将targetSdkVersion和所有依赖项更新到版本25,并将JAVA_HOME设置为JDK1.8。谢谢,阿比谢克·雅利安
Gem安装bundler给我这个错误。 错误:找不到有效的宝石bundler( 解决办法是什么?
整数包装类 我无法理解这种输出是如何形成的。我想了解这个整数中的“1000”是如何转换成字节中的“-24”的。我想知道这背后的逻辑。