2014-09-03 2 views
5

Согласно the Angular docs on $q, $ q.when() ожидает обещание/значение передается в.

Но я просто наткнулся на чужом коде, где он называется, не проходя ни в одном Params. Вот упрощенная версия того, что я вижу:

var modal = false; 

if (modalOpen) { 
    return $q.when() 
} 
modalOpen = true; 

modal = newModal({ 
    template: opts.template, 
}); 

modal.result.finally(function(){ 
    modalOpen = false; 
}); 
} 

ответ

6

Методы должны либо вернуть синхронно или асинхронно вернуться, чтобы оставаться последовательным. Если метод иногда возвращает синхронно и по-прежнему хочет сохранить факт, то он уже разрешен прозрачно - он возвращает пустое разрешенное обещание. Наличие API, которые иногда возвращают обещания, а иногда синхронно, - это recipe for trouble.

Использование $q.when - это самый простой способ получить пустое разрешенное обещание в угловом.

+0

отличный ответ. Именно то, что мне нужно. Благодаря! –

+0

Рад, что я мог помочь. Стоит отметить, что ошибка также верна - методы возврата Promise не должны «бросать» синхронно, а скорее возвращать отклонения. –

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