在Tampermonkey中如何實現對多個鏈接的并發GET請求并依次判斷返回結果?

在Tampermonkey中如何實現對多個鏈接的并發GET請求并依次判斷返回結果?

Tampermonkey中多個鏈接的并發GET請求及結果判斷

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

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

方案:并發請求與Promise.race

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

代碼示例:

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);     // 判斷結果是否滿足條件,例如:     if (result.data.includes("success")) {       console.log("條件滿足,結果:", result);       return result;     } else {       console.log("第一個請求不滿足條件");       // 可在此處處理后續請求,或直接返回       return null; // or handle other results     }   } catch (error) {     console.error("請求錯誤:", error);     return null;   } }   main();

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

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

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