Есть ли у Angular предопределенный объект, который содержит все текущие обещания?

0

У меня есть контроллер, где я могу разрешить все, кроме одной функции (позвольте ей thisOneFunction()) запускать асинхронно. Причиной этого является то, что OneFunction() полагается на примерно 10 обещаний, которые были разрешены, иначе у него нет данных в области, которую он должен выполнить.

Я видел несколько примеров онлайн о том, как вы можете специально ухватить обещание отдельных запросов/запросов/услуг, но то, что я не видел, - это способ проверить, что все обещания сразу были решены - возможно, благодаря переменной углового состояния, которая Я просто не знаю? Что-то вроде:

var currentPromises = $state.promises;
currentPromises.then(thatOneFunction());

Или, если еще нет встроенной переменной, есть способ динамически генерировать список всех обещаний, выдающихся в текущий момент, которые я могу использовать.then()? Это очень помогло бы, потому что у меня будет много страниц в этом приложении, у которых есть эта структура.

То, что я пробовал/в настоящее время выполняю "Сейчас у меня есть работа, но для этого требуется некоторая жесткая кодировка, которую я бы предпочел не продолжать. Она основана на вставке вызова функции, которая проверяет счетчик, сколько раз это функция была вычислена, сравнивает ее с тем, сколько обещаний должно было вызывать эту функцию уже (жестко запрограммировано после подсчета обещаний в контроллере), и если она уже прошла все необходимые обещания, она вызывает thisOneFunction().

Спасибо за любую помощь/указатели.

Пример бит моего кода (реальные имена/переменные изменены):

контроллер

$scope.runAfterAllPromises = function() {
               *code dependedent on all promises here*
}

MySvc.loadList(function (results) {
        $scope.myList = results;
    });


$scope.runAfterAllPromises();

обслуживание

app.service("MySvc", ['$resource', function ($resource) {


    this.loadList = function (callBackFunction) {
        var stateRes = $resource('/api/ListApi');
        stateRes.query(function (ListResults) {
            if (callBackFunction && typeof (callBackFunction) === 'function') {
                callBackFunction(ListResults)
            };
        })
  • 0
    Я серьезно сомневаюсь, что такой объект существует. Обещания не привязаны к какому-либо конкретному состоянию или сфере действия и могут передаваться между ними.
  • 0
    Проверь это
Показать ещё 1 комментарий
Теги:
angular-promise

2 ответа

2
Лучший ответ

Вы можете связывать обещания, если это помогает?

так что-то вроде этого:

var promises = [];
promises.push(yourPromise1());
promises.push(yourPromise2());
promises.push(yourPromise3());
$q.all(promises).then(function(){ ...});

Это ты имеешь в виду?

  • 0
    Да, это самая близкая вещь, с которой я сталкивался на других сайтах, так что она очень близка к тому, что я знаю, что я могу сделать, я просто задавался вопросом, отслеживает ли angular это в $ state каким-то доступным способом. Если это так, то он сможет не выполнять все отдельные запросы к массиву обещаний, а просто вызвать некоторый встроенный массив, который отслеживает невыполненные в настоящее время обещания. Надеюсь, что это имеет смысл!
  • 0
    Знаете ли вы, как я мог бы реализовать это, когда я вызываю службу с функцией обратного вызова, а не API напрямую? У меня проблемы с выяснением этого.
Показать ещё 7 комментариев
0

Короткий ответ: Нет, такого объекта нет.

Теперь, как достичь того, чего вы хотите достичь:

var allPromise = $q.all([promise1, promise2, promiseN]);
allPromise.then(success).catch(error);

Изменение: после того, как ваш "Человек может мечтать о комментариях", я подумал добавить это:

Вы можете переопределить функцию $ q.defer и отследить все отложенные объекты и получить свои обещания.

Очевидно, это может иметь некоторые проблемы с отложенными созданными, но никогда не разрешенными и такими, но может быть самым простым способом для достижения желаемой функциональности. Если вы хотите пройти весь путь, вы можете посмотреть на угловые декораторы, которые обеспечивают функциональность для расширения угловых поставщиков

  • 0
    Я ценю ответ, мужчина может мечтать, правда?
  • 0
    @IfTrue Конечно :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню