在Tampermonkey中如何實現(xiàn)對多個鏈接的并發(fā)GET請求并依次判斷返回結(jié)果?

在Tampermonkey中如何實現(xiàn)對多個鏈接的并發(fā)GET請求并依次判斷返回結(jié)果?

Tampermonkey中多個鏈接的并發(fā)GET請求及結(jié)果判斷

本文探討如何在Tampermonkey腳本中高效處理多個鏈接的GET請求,并根據(jù)返回結(jié)果進(jìn)行條件判斷。 目標(biāo)是:并發(fā)發(fā)起多個GET請求,一旦滿足條件,立即停止后續(xù)請求并返回結(jié)果。

由于GM_xmlhttpRequest缺乏原生取消請求機(jī)制,無法直接中斷已發(fā)起的請求。因此,我們將采用并發(fā)請求,并通過promise和Promise.race實現(xiàn)條件判斷和請求終止。

方案:并發(fā)請求與Promise.race

此方案同時發(fā)起所有GET請求,利用Promise.race找出第一個滿足條件的請求結(jié)果。

代碼示例:

function fetchUrl(url) {   return new Promise((resolve, reject) => {     GM_xmlhttpRequest({       method: "GET",       url: url,       onload: (response) => {         resolve({ url: url, data: response.responseText });       },       onerror: (error) => {         reject(error);       }     });   }); }  async function main() {   const urls = [     "https://example.com/1",     "https://example.com/2",     "https://example.com/3"   ];    const promises = urls.map(url => fetchUrl(url));    try {     const result = await Promise.race(promises);     // 判斷結(jié)果是否滿足條件,例如:     if (result.data.includes("success")) {       console.log("條件滿足,結(jié)果:", result);       return result;     } else {       console.log("第一個請求不滿足條件");       // 可在此處處理后續(xù)請求,或直接返回       return null; // or handle other results     }   } catch (error) {     console.error("請求錯誤:", error);     return null;   } }   main();

此代碼首先定義了一個fetchUrl函數(shù),使用GM_xmlhttpRequest發(fā)起GET請求并返回一個Promise。main函數(shù)則創(chuàng)建包含所有URL的Promise數(shù)組,使用Promise.race并發(fā)執(zhí)行這些Promise。Promise.race返回第一個完成的Promise的結(jié)果。 代碼中包含一個示例條件判斷(result.data.includes(“success”)),您可以根據(jù)實際需求修改。 如果第一個請求不滿足條件,則可以根據(jù)需要進(jìn)一步處理剩余的請求或直接返回。 錯誤處理也包含在try…catch塊中。

重要說明: 此方案雖然并發(fā)執(zhí)行,但仍依賴于網(wǎng)絡(luò)狀況。如果所有請求都耗時較長,則效率提升有限。 對于大量URL,考慮分批處理或更高級的并發(fā)控制策略。 請確保替換示例URL為您的實際鏈接。 此代碼需要Tampermonkey或類似用戶腳本管理器。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊5 分享