mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
fix: don't wait for IdleTime each time
This commit is contained in:
parent
f375267e79
commit
a78f98a723
@ -601,7 +601,7 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
|
|
||||||
#requestHandlers = new WeakMap<Handler<HTTPRequest>, Handler<HTTPRequest>>();
|
#requestHandlers = new WeakMap<Handler<HTTPRequest>, Handler<HTTPRequest>>();
|
||||||
|
|
||||||
#inflight$ = new ReplaySubject<number>(1);
|
#inflight$ = new ReplaySubject<[number, number]>(1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -613,7 +613,7 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
.pipe(
|
.pipe(
|
||||||
mergeMap(originalRequest => {
|
mergeMap(originalRequest => {
|
||||||
return concat(
|
return concat(
|
||||||
of(1),
|
of([1, Infinity] as [number, number]),
|
||||||
merge(
|
merge(
|
||||||
fromEmitterEvent(this, PageEvent.RequestFailed),
|
fromEmitterEvent(this, PageEvent.RequestFailed),
|
||||||
fromEmitterEvent(this, PageEvent.RequestFinished),
|
fromEmitterEvent(this, PageEvent.RequestFinished),
|
||||||
@ -628,16 +628,19 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
}),
|
}),
|
||||||
take(1),
|
take(1),
|
||||||
map(() => {
|
map(() => {
|
||||||
return -1;
|
return [-1, Infinity] as [number, number];
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
mergeScan((acc, addend) => {
|
mergeScan(
|
||||||
return of(acc + addend);
|
(acc, addend) => {
|
||||||
}, 0),
|
return of([acc[0] + addend[0], Date.now()] as [number, number]);
|
||||||
|
},
|
||||||
|
[0, Infinity] as [number, number]
|
||||||
|
),
|
||||||
takeUntil(fromEmitterEvent(this, PageEvent.Close)),
|
takeUntil(fromEmitterEvent(this, PageEvent.Close)),
|
||||||
startWith(0)
|
startWith([0, Date.now()] as [number, number])
|
||||||
)
|
)
|
||||||
.subscribe(this.#inflight$);
|
.subscribe(this.#inflight$);
|
||||||
}
|
}
|
||||||
@ -1752,10 +1755,10 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
|
|
||||||
return this.#inflight$.pipe(
|
return this.#inflight$.pipe(
|
||||||
switchMap(inflight => {
|
switchMap(inflight => {
|
||||||
if (inflight > concurrency) {
|
if (inflight[0] > concurrency) {
|
||||||
return EMPTY;
|
return EMPTY;
|
||||||
}
|
}
|
||||||
return timer(idleTime);
|
return timer(new Date(inflight[1] + idleTime));
|
||||||
}),
|
}),
|
||||||
map(() => {}),
|
map(() => {}),
|
||||||
raceWith(
|
raceWith(
|
||||||
|
@ -922,6 +922,23 @@ describe('Page', function () {
|
|||||||
]);
|
]);
|
||||||
expect(t2).toBeGreaterThan(t1);
|
expect(t2).toBeGreaterThan(t1);
|
||||||
});
|
});
|
||||||
|
it('should resolve if network was idle for longer then idleTime', async () => {
|
||||||
|
const {page, server} = await getTestState();
|
||||||
|
|
||||||
|
const idleTime = 25;
|
||||||
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
await new Promise(resolve => {
|
||||||
|
return setTimeout(resolve, idleTime * 2);
|
||||||
|
});
|
||||||
|
const [t1, t2] = await Promise.all([
|
||||||
|
page.waitForNetworkIdle({idleTime}).then(() => {
|
||||||
|
return Date.now();
|
||||||
|
}),
|
||||||
|
// Add a little bit of time due to async operations
|
||||||
|
Promise.resolve(Date.now() + 10),
|
||||||
|
]);
|
||||||
|
expect(t2).toBeGreaterThan(t1);
|
||||||
|
});
|
||||||
it('should work with no timeout', async () => {
|
it('should work with no timeout', async () => {
|
||||||
const {page, server} = await getTestState();
|
const {page, server} = await getTestState();
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
Loading…
Reference in New Issue
Block a user