Witam, poprawiam kod bota gry przeglądarkowej i mam pewien problem. JS jest dla mnie mega dziwny dlatego potrzebuje o jakieś nakierunkowanie jak mogę poprawić mój problem albo pod jakimi frazami mogę tego szukać.
Problem jest następujący:
Bot ma sprzedawać przedmioty do NPC które ma w paczkach. Po dłuższym czasie bocenia liczba paczek może być bardzo duża i wtedy pojawia się problem, ponieważ algorytm sprawdza najpierw ile ma stron takich paczek lecz wysyłając taką wiadomość przy użyciu:
await jQuery.get
Gdy liczba paczek jest większa mniej więcej niż 15 serwer sypie 503.
Zastanawiałem się nad dodaniem może jakiegoś delay pomiędzy każdym wywołaniem funkcji?
Finalnie problem rozwiązałem dodając limit do sprawdzania max. 10 stron paczek (wtedy, żeby sprzedać np. 100 stron musze użyć funkcjonalności 10 razy) lecz takie rozwiązanie mnie nie satysfakcjonuje i chciałbym zrozumieć jak to działa i zrobić to solidnie.
Poniżej zamieszczam fragment kodu:
async onFindEmptySpotSuccess(t, e) {
if (packages.stop) {
tools.reload();
return;
}
packages.bagSpot = Object.assign(t, {
b: e
});
document.querySelectorAll('#inventory_nav a')[e - 512].click();
packages.inv = document.getElementById('inv');
const body = await jQuery.get(tools.link.full({
mod: 'packages',
f: '0',
fq: storage.packages.quality[0],
qry: '',
page: 0,
sh: tools.url.query('sh')
}));
const page = (await jQuery(body).find('.paging_right_full')[0]) ? jQuery(body).find('.paging_right_full')[0].href.match(/\d+$/)[0] : 1;
let new_page = Math.min(page, 10);
packages.packageList = [];
packages.packageHolder = [];
Promise.all([...Array(parseInt(page)).keys()].map(page => packages.getPackages(page + 1))).then(() => {
console.log('WSKAKUJE TUTAJ!');
packages.packageList = packages.packageList.sort((a, b) => b.s - a.s);
if (packages.packageList.length > 0) {
packages.sellItems();
} else window.location.reload();
});
},
async getPackages(_p) {
console.log('getPackages: ', _p);
if (packages.stop) {
tools.reload();
return;
}
await jQuery.get(tools.link.full({
mod: 'packages',
f: '0',
fq: storage.packages.quality[0],
qry: '',
page: _p,
sh: tools.url.query('sh')
}), t => {
tools.statusText(tools.translate('workflow-packagesScan') + ' ' + _p);
var e = jQuery(t).find('.packageItem');
if (e.length > 0) {
for (let j = 0; j < e.length; j++) {
let p = e[j],
id = p.querySelector('input').value,
i = p.querySelector('.ui-draggable'),
b = parseInt(tools.item.getItemBasis(i).split('-')[0]),
g = b == 14 ? true : false,
s = tools.item.getItemSize(i),
q = tools.item.getItemAmount(i),
f = !g && storage.packages.useSmeltFilter ? !smelt.isSmeltItem(i) : true;
if (storage.packages.type.indexOf(b) > -1 && storage.packages.quality.indexOf(parseInt(tools.item.getItemQuality(i))) > -1 && !g && f) {
console.log('item: ', i);
packages.packageList.push({
p,
i,
s,
id,
q
});
}
}
}
return;
});
return;
},
Za wszystkie porady z góry dziękuje.
Wesołych Świąt!