refactor: use Promise.all for check disqus

dependabot/npm_and_yarn/ini-1.3.7
SukkaW 5 years ago
parent 112f5d0f31
commit af6512312b

@ -110,7 +110,7 @@ function DisqusJS(config) {
* _get(url) - Fetch 的一个封装
*
* @param {string} url
* @return {Object} - 一个 Promise 对象返回请求结果
* @return {Promise} - 一个 Promise 对象返回请求结果
*/
const _get = (url) => fetch(url, { method: 'GET' })
@ -197,53 +197,35 @@ function DisqusJS(config) {
function checkDisqus() {
$$(DISQUS_CONTAINER_EL_ID).innerHTML = `<div id="dsqjs"><section><div id="dsqjs-msg">正在检查 Disqus 能否访问...</div></section>${HTML_TPL_EL_FOOTER}</div>`;
// 测试 Disqus 的域名
// *.disquscdn.com 没有被墙所以不做检查
const domain = ['disqus.com', `${disqusjs.config.shortname}.disqus.com`];
let test = 0;
let success = 0;
const checker = () => {
if (domain.length === test && test === success) {
// 测试域名数量 ==== 测试次数 === 成功次数
// 如果 true 则认定可以 Disqus 可以连通
useDisqus()
} else if (domain.length === test) {
// 否则认为 Disqus 无法连通
useDsqjs()
}
// 如果测试域名数量不等于测试次数则说明测试还没有完成,不执行任何操作
}
const runcheck = (domain) => {
return new Promise((resolve, reject) => {
const img = new Image;
// 处理加载超时
const timeout = setTimeout(() => {
img.onerror = img.onload = null;
test++;
checker()
reject();
}, 3000);
img.onerror = () => {
clearTimeout(timeout);
test++;
checker()
reject();
}
img.onload = () => {
clearTimeout(timeout);
test++;
success++;
checker()
resolve();
}
img.src = `https://${domain}/favicon.ico?${+(new Date)}=${+(new Date)}`
img.src = `https://${domain}/favicon.ico?${+(new Date)}=${+(new Date)}`;
})
}
for (const i of domain) {
runcheck(i);
}
// 测试 Disqus 的域名
// *.disquscdn.com 没有被墙所以不做检查
return Promise.all([
runcheck('disqus.com'),
runcheck(`${disqusjs.config.shortname}.disqus.com`)
]).then(useDisqus, useDsqjs);
}
function assignClickEventForAskForFulButton() {
@ -436,7 +418,7 @@ function DisqusJS(config) {
}).catch(getCommentError);
}
/*
/**
* parseCommentData(data) - 解析评论列表
*
* @param {Array} data - 评论列表 JSON

Loading…
Cancel
Save