Можно ли выполнить gm_xmlhttprequest асинхронно?

Я попытался поместить gm_xmlhttprequest в цикл while, но код выполняется синхронно. Можно ли заставить его выполняться асинхронно, по одному?

1 ответ

Решение

Простейшее изменение вашего кода будет следующим

function doXHR(counter) {
    if (counter < count) {
        var GoToURL = link;
        GM_xmlhttpRequest({
            method: "GET",
            url: GoToURL,
            onload: function(response) {
                if (response.finalUrl.match(/true$/)) { 
                    longList = longList + link; 
                }
                doHXR(counter+1);
            }
        });
    }
}
doXHR(0);

т.е. в onload, запустите следующую итерацию... это приведет к тому, что запросы будут выполняться последовательно

Если вам нужно запустить этот код, то когда все запросы будут завершены, продолжайте делать что-то еще

function doAllXHR(count, callback) {

    function doXHR(counter) {
        if (counter < count) {
            var GoToURL = link;
            GM_xmlhttpRequest({
                method: "GET",
                url: GoToURL,
                onload: function(response) {
                    if (response.finalUrl.match(/true$/)) { 
                        longList = longList + link; 
                    }
                    doHXR(counter+1);
                }
            });
        } else {
            callback('done');
        }
    }
    doXHR(0);
}

doAllXHR(20, function(result) {
    console.log(result);
    // and continue with whatever it is you do
});
Другие вопросы по тегам