中断 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 });
    }
}