Я пытаюсь пересчитать все страницы через XHR, используя JS Promise
.
Для меня это относительно тривиально получить это с помощью рекурсивных обратных вызовов, но как я могу добиться этого с помощью обещаний?
Упрощенный пример без обещаний:
class Foo {
getPages(callback, pagesCount)
{
if (typeof(pagesCount) === 'undefined') {
pagesCount = 0;
}
// Let's say its async XHR
window.setTimeout(() => {
++pagesCount;
// Let's say that in 90% of cases we will get a full page
if (Math.random() < 0.9) {
console.log('Page received!');
this.getPages(callback, pagesCount);
} else {
console.log('Last page received!');
callback(pagesCount);
}
}, 1000);
}
doStuff(pagesCount)
{
console.log('Total pages: ' + pagesCount);
}
run()
{
this.getPages(this.doStuff);
}
}
(new Foo()).run();
И я пытаюсь добиться чего-то вроде:
class Foo {
getPages()
{
...
}
doStuff(pagesCount)
{
console.log('Total pages: ' + pagesCount);
}
run()
{
this.getPages().then(this.doStuff);
}
}
(new Foo()).run();