问题描述
我正在使用Puppeteer Sharp呈现报告,其中一部分是执行用户提供的JavaScript来为报告准备数据。
我使用AddScriptTagAsync将脚本添加到页面,然后在呈现报告之前调用用户提供的脚本。
如果用户提供的javascript出现了导致无限循环的问题(例如),那么我对EvaluateExpressionAsync
的调用将永远等待:
await page.EvaluateExpressionAsync<dynamic>($"Prepare({DataObject});")
我无法将取消令牌传递给EvaluateExpressionAsync
,因此我无法控制它,并且此方法似乎没有超时可用。
我想将其限制为可控制的秒数,然后使其超时。
任何有关如何执行此操作的建议将不胜感激。
解决方法
您将使用WaitForExpressionAsync。
此方法的想法是在一段时间内执行表达式,直到结果为真为止。
但是,如果确保表达式始终返回真实值,则WaitForExpressionAsync将使用您传递的超时作为选项进行超时。