node.js - 如何将变量传递给 page.on('dialog')?
问题描述
如何将其他变量传递给page.on('dialog')
函数?
如何从函数中获得回报?
page.on('dialog', async (dialog) => {
console('get additional variables:', param) // get additional variables
if (dialog.message() === param) {
res.isSuccess = true;
await dialog.accept();
}
else {
res.isSuccess = false;
await dialog.accept();
}
}, p);
console('get return:', res) // Need to get res.isSuccess
解决方案
我假设您需要拦截第一个dialog
事件。否则isSuccess
失去任何逻辑意义。拦截需要以同步方式执行以允许测试逻辑。
在您的情况下,Promise 是一个很好的解决方案。
选项 1 - 包装承诺和测试
function dialog(inputValue) {
return new Promise((resolve, reject) => {
page.once('dialog', async dialog => {
console.log('additional', inputValue);
if (dialog.message() === inputValue) {
await dialog.accept();
resolve();
} else {
await dialog.accept();
reject();
}
});
})
}
然后在您的代码中,您可以像这样使用它:
try {
await dialog('Some message');
console.log('OK');
} catch (e) {
console.log('ERROR');
}
选项 2 - 创建承诺
创建一个拦截第一个对话框并返回它的承诺包装器:
function firstDialog() {
return new Promise(resolve => {
page.once('dialog', async dialog => {
await dialog.accept();
resolve(dialog);
});
})
}
然后在您的代码中简单地测试您需要的任何内容:
const dialog = await firstDialog();
if (dialog.message() === 'Some message') {
console.log('OK');
} else {
console.log('ERROR');
}
代码尚未经过测试,可能需要进行细微更改
推荐阅读
- c++ - 修复 C++ 项目中未找到标识符的错误
- sqlite - 如何在 .Net Core 中将内存流或字节数组转换为 SqlLite DB?
- javascript - Angular SSR - ReferenceError 未定义
- java - 使用 google_mobile_sdk 在 Native Ad Flutter 中出现问题
- java - 有没有办法从 SSE Spring userwise Java 发出事件?
- javascript - 高山模式无法从隐藏的移动菜单中打开
- amazon-web-services - 在 Terraform aws_ecs_task_definition 我如何在卷部分定义绑定挂载
- matplotlib - 0 和 255 都为“灰色”彩色地图提供黑色图像,这是为什么呢?
- sql - 尝试客户信息的 SQL 问题
- gulp - 脚本文件未加载到 rev-manifest.json (gulp)