帮朋友写了一个 Tampermonkey 脚本,用于爬取一个多页的表格,其中有一个小功能需要翻页后等待几秒以确保数据加载完成。
但是发现这玩意儿中的 setTimeout() 函数并没有按照我想象中的等待一定时间后再执行下一行代码。
原因分析
原因是 setTimeout() 作为同步代码执行,并且对 setTimeout() 的多次调用均同时运行。每次调用 setTimeout() 都会创建异步代码,该代码将在给定延迟后稍后执行。 就其本身而言,
setTimeout()不能用作sleep()函数,但是你可以使用async和await创建自定义JavaScriptsleep()函数。
解决方案
结合 Promises 、 async 和 await 编写一个 sleep() 函数,然后从 async 函数中调用它,并且需要与 await 关键字一起使用。
1 | |