2015-02-20 4 views
0

Я думал, что правильно использовал интерфейс AngularJS $q. Но функция, которую я передаю в обратный вызов then, никогда не выполняется. И я звоню resolve в функции, которая завернута $q. Я подтвердил, что resolve() вызывается, но, кажется, это не та же функция, которая прикована с .then():

$q(function(resolve, reject) { 
    resolve(); 
    reject(); 
    console.log("This happens"); //This shows that resolve() is being called 
}).then(function() { 
    console.log("This doesn't"); //Yet this never gets executed 
}).catch(function() { 
    console.log("This also doesn't happen"); 
}); 

Выход:

This happens 

Что я делаю неправильно?

Мое окружение - это единичный тест KarmaJS с моккой и синон-чаем.

+0

Вы можете добавить отклонение и посмотреть, если это срабатывает и почему? –

+0

@ Даян Морено Леон: Сделал так и обновил вопрос. Функция 'catch' также не выполняется. –

+1

Да, пропущенная часть, где это было испытание, Remco прав, вам нужно запустить цикл углового перебора, используя либо $ apply, либо $ digest –

ответ

1

Необходимо позвонить по телефону $rootScope.$apply().

$q(function(resolve, reject) { 
    resolve(); 
    console.log("This happens"); //This shows that resolve() is being called 
}).then(function() { 
    console.log("This too!"); 
}); 
$rootScope.$apply(); 
+0

Что didi t! Благодаря! –