Как загрузить данные с возможно разными типами в контроллер?

Раньше angular поддерживал возможность загружать данные напрямую из Promise. По логичным соображениям (не очевидное присваивание) эту возможность убрали.
Теперь нужно писать так

getdata(1).then(function(data)
{
    $scope.data = data;
});


Но, мне сейчас крайне важно иногда не выходить из потока, поэтому getdata может вернуть массив напрямую без Promise, а может вернуть Promise.

Для этого использую вспомогательную функцию
Упрощенно так:
Интерфейс
loadData($scope, name, getter, params);

//и вызов
loadData($scope, 'data',getdata, [1]);


Она проверяет возвратила ли функция Promise или данные и соответственно присваивает значение в $scope сразу, либо через then.

Внимание, вопрос! У кого есть какие идеи в этом направлении, может есть более красивые решения?
  • Вопрос задан
  • 2227 просмотров
Пригласить эксперта
Ответы на вопрос 3
mannaro
@mannaro
Умею профессионально гуглить
А чем этот вариант плох?
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$q.when

$q.when(loadData()).then(function (result) {
    $scope.data = result;
});


Но только имейте в виду, что колбэки в then выполняются не синхронно, а как получится по event-loop-у. То есть у вас может пара милисекунд пройти между вызовом loadData и колбэком в then. Если для вас это критично - можно воспользоваться вашим решением.
Ответ написан
AMar4enko
@AMar4enko
Так вы сами себе противоречите.
Но, мне сейчас крайне важно иногда не выходить из потока
и при этом допускаете, что может вернуться promise.
Вероятно, у вас где-то недопонимание. Опишите ситуацию более детально.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы