Javascript 如何跟踪事件发送的次数?

Javascript 如何跟踪事件发送的次数?,javascript,puppeteer,Javascript,Puppeteer,我正在使用jest和Puppeter构建一个代码,以检查在加载页面时事件是否只发送一次 我在使用Puppeter构建代码时遇到了问题,如果再次发送相同的事件,将返回消息 const eventTest = async (viewEndpoint) => { await Promise.race([ page.goto(url), await page.waitForResponse(viewEndpoint)

我正在使用jest和Puppeter构建一个代码,以检查在加载页面时事件是否只发送一次

我在使用Puppeter构建代码时遇到了问题,如果再次发送相同的事件,将返回消息

const eventTest = async (viewEndpoint) => {
        await Promise.race([
            page.goto(url),
            await page.waitForResponse(viewEndpoint)
            .then(await page.waitForResponse(viewEndpoint, 10000))
            .then(console.log("Event loaded more than once"))       
        ])
    }
上面的代码是我迄今为止一直在尝试的
viewEndPoit
是给定url的事件端点。首先我导航到页面,然后使用事件端点的
page.waitForResponse
,如果一切正常,我将使用
,然后再使用
。如果事件再次发生,则加载消息

它不工作,总是返回
console.log
,即使事件只加载一次


例如,当加载主页时,会发送一个名为home的事件。我可以在devtools网络选项卡上查看它。我的目标是,如果事件在“网络”选项卡上出现两次,则返回console.log。

最明显的方法是简单地使用函数
页面。waitForResponse
两次,然后在
Promise.race
中使用函数

代码示例

const waitForEventTwice=async()=>{
试一试{
wait page.waitForResponse(viewEndpoint,{timeout:10000});
wait page.waitForResponse(viewEndpoint,{timeout:10000});
log('是的,它发生了两次');
}捕捉(错误){
log('不,它没有,而是发生了超时错误');
//根据您的用例,您可能希望在这里“抛出错误”
}
}
等待承诺([
第页转到(url),
WaitForEventWice(),
]);

一种更复杂的方法是统计事件被触发的次数,并相应地解决问题。这将确保不会因为在瞬间未侦听事件而错过任何事件

const waitForEventTwice=()=>新承诺((解决,拒绝)=>{
设计数器=0;
第页('response',函数侦听器(response){
if(response.url()==='…'){//测试该响应是否是您要查找的响应
计数器+=1;
如果(计数器==2){
// ...
resolve();//它发生了
}
}
});
设置超时(()=>{
RemovelListener('response',listener);
//它没有发生
// ...
reject();//或者resolve(),这取决于您的用例
}, 2000);
});
等待承诺([
第页转到(url),
WaitForEventWice(),
]);

首先不要将async/await与then/catch混用,这样事情会变得更清楚