在函数完成执行后调用`done()`和调用`return`有什么区别?

时间:2016-01-22 06:57:03

标签: javascript node.js

我很困惑我是否应该在函数完成执行后调用done()return。我知道调用done意味着我必须将它作为参数传递给函数。会选择拨打return而不是done()的哪些实例?

即。

var foo = 2;
it('returns 2 on completion', function(done) {
    expect(foo).toEqual(2);
    done();
});

var foo = 2;
it('returns 2 on completion', function() {
    expect(foo).toEqual(2);
    return;
})

1 个答案:

答案 0 :(得分:1)

您使用done()回调还是仅仅返回取决于您正在使用的API。在各种异步上下文中都需要done()回调。在我的头顶:

在所有这些情况下,done()回调是必要的,因为他们需要做的工作不能在return之前完成。例如,测试可能包括随机超时,Express中间件可能会发出网络请求等等。

重要提示:每个函数都会返回。 done()回调是一种惯例,当return不足以因为它发生得太快时,你会使用该约定。