首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >等待异步函数处理mocha runner的事件

等待异步函数处理mocha runner的事件
EN

Stack Overflow用户
提问于 2019-03-12 11:03:32
回答 1查看 386关注 0票数 3

我正在研究如何在mocha runner事件中等待异步函数的执行。例如,我有一个定制的摩卡记者,有一个事件:

代码语言:javascript
运行
复制
    function MyReporter(runner) {
     Base.call(this, runner);
     runner.on('suite end', function(suite) {
      Testlogger.flush()
     });
    }
    mocha.utils.inherits(MyReporter, mocha.reporters.spec);

Testlogger.flush() -是一个带有回调的函数,或者是带有承诺(具有异步逻辑的东西)的函数。在我的例子中,类似于回调:

代码语言:javascript
运行
复制
           fs.writeFile(where, what, (err) => {
            if(err) {
                callback("error")
            } else {
                callback("done")
            }
        });

或者承诺回报的东西:

代码语言:javascript
运行
复制
            const test = promisify(fs.writeFile)
            return test.call(null, where, what)

或者它可以使用本地JS承诺

因此,我的观点是,该函数应该以异步方式工作,这种“异步”的形式可能并不重要。我知道事件是同步的,我尝试了很多不同的选择,但都失败了。此外,我还对mocha中的魔术not ()函数进行了讨论,但没有找到健壮的示例。当然,如果我使用fs.writeFileSync()函数,没有问题。

我如何迫使运行者等待我的异步函数来处理事件?

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 12:57:58

最近遇到了类似的事情。我们用的是柏树9号。

从这个链接中学习:https://github.com/cypress-io/cypress/issues/7139,这似乎是摩卡跑步者的“设计”。

所以你可以用两个选择来解决这个问题。

选项1

启动带有--no-exit标志的摩卡跑步者。

我没有尝试过这个选择,因为这对我们来说不是一个选择。但基于上面的链接,它听起来似乎是可行的。尽管这可能不会阻止事件处理程序函数,因此取决于您正在做的事情可能无法工作。

选项2

同样受到上面的柏树问题链接的启发,应该利用一个去异步库,比如去异步去异步-承诺。因此,上面的代码就变成了这样:

代码语言:javascript
运行
复制
 runner.on('suite end', function(suite) {
      deasyncPromise(Testlogger.flush())
 });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55119940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档