मैं मूल क्रम में मान वापस करने के लिए async GM_xmlhttpRequest का उपयोग कैसे कर सकता हूं?
मैं किसी साइट पर दिनांक अद्यतन करने के लिए एक Tampermonkey स्क्रिप्ट बनाने का प्रयास कर रहा हूं। मुझे साइट से आईडी की एक सरणी मिली है, और मैं सरणी की आईडी के साथ डेटा का अनुरोध कर रहा हूं। उसके बाद, मुझे प्रत्येक इनपुट का डेटा वापस करना होगा।
जैसा कि फ़ंक्शन है async
, यह एक यादृच्छिक क्रम में डेटा देता है, लेकिन मुझे मूल क्रम में लौटने के लिए उन नए सरणियों की आवश्यकता है। मैंने सिंक और Promise
एस की कोशिश की है , लेकिन पहला बहुत धीमा है और मुझे दूसरा समझ में नहीं आया है।
मैं आईडी को सॉर्ट कर सकता हूं, लेकिन मुझे पहले ऐरे के क्रम में तारीखें भी मिलीं, इसलिए मुझे नहीं पता कि दूसरी आईडी सरणी के समान ऑर्डर कैसे प्राप्त किया जाए।
यहाँ कोड है:
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);
}
जवाब
आप 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()
एक वादा रिटर्न के साथ एक फ़ंक्शन बनाया है , जिसे सफलता प्राप्त करने पर हल किया जाता है , लेकिन विफलता पर खारिज कर दिया जाता है।
await
आगे बढ़ने से पहले वादे के निपटारे की प्रतीक्षा करता है और try
वादा अस्वीकृति को पकड़ने के लिए मौजूद है (यदि जीईटी विफल हो जाता है)।
सन्दर्भ:
- Promiseएमडीएन पर ।
- awaitएमडीएन पर ।