我正在尝试制作Tampermonkey脚本来更新某些网站上的日期。我从网站上获得了一个ID数组,并且正在使用ID来请求数据。之后,我必须返回每个Input的数据。
由于该函数是async
,它以随机顺序返回数据,但是我需要那些新数组以原始顺序返回。我已经尝试过sync和Promise
s,但是第一个太慢了,我还不了解第二个。
我可以对id进行排序,但我也得到的日期与第一个数组的顺序相同,因此我不知道如何实现与第二个id数组相同的顺序。
这是代码:
id = GM_getValue('id');
for (let i = 0; i < id.length; i++) {
setTimeout(() => {
console.log("Updating " + (i + 1) + " Title");
GM_xmlhttpRequest({
method: "GET",
url: "***" + id[i] + "/***",
onload: function(response) {
$(response.responseText).find("#main-form :input").each(function(x) {
if (x == 0) ids.push(parseInt($(this).val()));
if (x == 1) array.push($(this).val()));
});
}
});
}, i * 333);
}
您可以使用Promises以GET
特定顺序执行请求。这是一个例子:
id = GM_getValue('id');
function makeGetRequest(url) {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(response) {
resolve(response.responseText);
},
onerror: function(error) {
reject(error);
}
});
});
}
for (let i = 0; i < id.length; i++) {
console.log("Updating " + (i + 1) + " Title");
try {
const response = await makeGetRequest("***" + id[i] + "/***");
$(response).find("#main-form :input").each(function(x) {
if (x == 0) ids.push(parseInt($(this).val()));
if (x == 1) array.push($(this).val());
});
} catch (error) { // in case the GET request fails
console.error("Request failed with error code", error.status, ". Message is ", error.responseText);
}
}
在此示例中,我创建了一个makeGetRequest()
带有返回promise的函数,该函数在GET成功时得到解决,但在失败时被拒绝。
await
等待Promise结算,然后继续操作,并且try
存在以捕获Promise拒绝(如果GET失败)。
参考文献:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句