2016-01-22 2 views
0

Я смущен, должен ли я позвонить done() после завершения функции или return. Я понимаю, что вызов будет означать, что я должен передать его как параметр функции. В каких случаях можно выбрать return, а не done()?В чем разница между вызовом `done()` и вызовом `return` после завершения функции?

т.е.

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; 
}) 
+0

Используйте «done» для асинхронных тестов, чтобы указать, что он завершен. 'return' во втором случае не имеет значения и может быть удален. – dfsq

ответ

1

Используете ли вы done() обратный вызов или просто вернуться зависит от API, который вы используете. A done() обратный вызов необходим в различных асинхронных контекстах. С верхней части моей головы:

Во всех этих контекстах необходим обратный вызов done(), потому что им нужно выполнить работу, которая не может закончить до return. Например, тесты могут включать в себя случайные тайм-ауты, промежуточное программное обеспечение Express может выполнять сетевые запросы и т. Д.

Важное примечание: каждые функция возвращается. Обратный вызов done() - это соглашение, которое вы используете поверх этого, когда return недостаточно, потому что это происходит слишком рано.

Смежные вопросы