Возможно ли разрешить угловое обещание сразу и эффективно привести код в режим синхронного вызова? Я знаю, что это побеждает цель обещаний, но я хочу сделать это для тестирования модулей. Мое тестирование показывает, что тогда вызывается сразу, но я не уверен, есть ли потенциальная проблема времени здесь, где then
по-прежнему считается asynch?Устранение обещаний немедленно
function someService(){
var deferred = $q.defer();
deferred.resolve(myObj);
return deferred.promise;
}
someService().then(function(obj){
//will this be executed right away just like it would if this was a synchronous call?
// more code here under test
});
var myVal = 10;
Будет ли выполняться назначение myVal до последующего обратного вызова? Или я могу доверять тому, что тогда всегда будет сразу?
По моему мнению, это нарушает концепцию правильного модульного тестирования путем изменения путей выполнения кода между модульными тестами и фактическим выполнением приложения. Однако ... Без переопределения реализации углового обещания для 'then' -> Нет, это всегда будет вести себя асинхронно. – SnareChops
Суть заключается в том, чтобы издеваться над сервисом и сосредоточиться на тестировании, не беспокоясь о зависимости от службы. Обычно я отделяю логику до отдельного проверяемого объекта, но у меня нет роскоши менять код здесь. – user4131376
говорит ** независимо от того, когда обещание было или будет разрешено **, что означает, что если результат уже доступен, то также предполагается, что «тогда» вызывается немедленно без какой-либо временной или асинхронной проблемы. –