中断 async/await 流量
Breaking async/await flow
我正在我们自己的测试自动化框架中为 selenium 编写测试用例。
因为我想知道我们的框架在做什么,所以我在控制台中添加了一些日志记录,这些日志记录也将添加到我们的测试报告中。
为此我编写了以下函数
async error(message?: any, indent?: boolean) {
const datetime = timeUtils.generateTimestampForLogging();
indent = indent == undefined ? true : indent;
this.mycon.info(`${CYAN}${indent ? '\t' : ''}${datetime} :: ERROR :: ${message} ${RESET} `);
if (this._world != undefined) {
await this._world.attach(`<span style="color:forestgreen;">${datetime} :: ERROR :: ${message}</span>`, 'text/html');
}
}
要将数据附加到测试报告中,我必须使用async/await。
但是,我不想使 'error' 函数异步,因为我还在需要非承诺 return 值的地方使用它。
像这儿
有没有办法让 'error' 函数保持非异步并仍然等待 'attach' 调用?
像这样?
在承诺中使用 fs
时,使用 fs.promises
对象而不是 callback-based API:
async function createIfNotExists(path: string): Promise<void> {
try {
// instead of passing an error object to a callback, this throws on error
await fs.promises.access(path);
} catch {
// here, we know an error occurred with the access
await fs.promises.mkdir(path, { recursive: true });
}
}
我正在我们自己的测试自动化框架中为 selenium 编写测试用例。 因为我想知道我们的框架在做什么,所以我在控制台中添加了一些日志记录,这些日志记录也将添加到我们的测试报告中。
为此我编写了以下函数
async error(message?: any, indent?: boolean) {
const datetime = timeUtils.generateTimestampForLogging();
indent = indent == undefined ? true : indent;
this.mycon.info(`${CYAN}${indent ? '\t' : ''}${datetime} :: ERROR :: ${message} ${RESET} `);
if (this._world != undefined) {
await this._world.attach(`<span style="color:forestgreen;">${datetime} :: ERROR :: ${message}</span>`, 'text/html');
}
}
要将数据附加到测试报告中,我必须使用async/await。
但是,我不想使 'error' 函数异步,因为我还在需要非承诺 return 值的地方使用它。
像这儿
像这样?
在承诺中使用 fs
时,使用 fs.promises
对象而不是 callback-based API:
async function createIfNotExists(path: string): Promise<void> {
try {
// instead of passing an error object to a callback, this throws on error
await fs.promises.access(path);
} catch {
// here, we know an error occurred with the access
await fs.promises.mkdir(path, { recursive: true });
}
}