Можно ли выполнить 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
});