Я работаю с обещаниями.Я выполняю свой метод обещания:
async gotoMap(page, expectedStartName, endMap) {
let someArray = [{x: 12, y: 15}, {x: 23, y: 56}];
await goTo.init(page, someArray[0].x, someArray[0].x.y);
console.log('After first map.');
await checkIfWeWentThrough(); //other async method, irrelevant
await goTo.init(page, someArray[1].x, someArray[1].y);
console.log('After second map.');
}
},
Код goTo.init
Метод:
return new Promise((resolve, reject) => {
eventBus.on('start::goto', async() => {
console.log('start::goto');
await this.goto(page, x, y);
if (await waitForCoords(page, x, y)) {
console.log('we achieve goal');
resolve();
} else {
console.log('emit start::goto inner');
eventBus.emit('start::goto');
}
});
console.log('emit start::goto outer');
eventBus.emit('start::goto');
});
Это console.log «мы достигаем цели», поэтому я ожидаю, что первое выполнение завершено, решенои ушел.
После того, как я выполнил этот метод во второй раз (после, скажем, 20 секунд, но почти сразу же после первого выполнения), благодаря журналам консолей с waitForCoords
я все еще могу видеть, что он работает с параметрами (аргументами)) с первого исполнения.
За исключением того, что я вижу, что появляется все больше и больше console.logs.После минуты его запуска этот метод многократно повторяется, так что он спамит консолями каждые несколько миллисекунд.Но это происходит только после второго выполнения из goTo.init
.До этого он, кажется, не умножается.
Я не понимаю.Почему он все еще работает со старыми параметрами, хотя я решил это?Почему этот метод умножается?
Код waitForCoords
, который находится в выражении if:
return new Promise(async(resolve, reject) => {
let timeoutId = setTimeout(() => {
resolve(false);
}, 3000);
console.log(x,y);
await page.waitForFunction(`
window.hero.x === ${x} && window.hero.y === ${y}
`);
clearTimeout(timeoutId);
resolve(true);
});
Таким образом, он разрешает false каждые 3 секунды и разрешает true после завершения чего-либо (метод кукловода)которые выполняют js в контексте страницы, но я думаю, что это не имеет значения).
Edit : я дополнительно добавляю явный таймаут в метод waitForCoords
, чтобы он не разрешал falseпосле того, как это решает истину.В любом случае, моя проблема все та же - поведение не изменилось вообще.