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