abc123aaaa Ответов: 2

Как последовательно выполнять функции с помощью angularjs


хотите, чтобы четыре функции одна за другой последовательно выполнялись.

Что я уже пробовал:

функция последовательная(задачи) {
ВАР prevPromise;
angular. forEach(задачи, функция (задача) {
// Первая задача
если (! prevPromise) {
prevPromise = задача();
} еще {
prevPromise = prevPromise. then(задача);
}
});
возврат превперспективный;
}


серийный номер([task1, task2]);

функция task1() {
ВАР д = $вопрос.отложить();
$timeout(функция () {
//некоторые задачи
д. решить();
}, 1000);
возвращение d. обещание;


};

функция task2() {
ВАР д = $вопрос.отложить();
$timeout(функция () {
//некоторые задачи
д. решить();
}, 1000);
возвращение d. обещание;

};

2 Ответов

Рейтинг:
1

Anurag Sharma

Пожалуйста, найдите решение в приведенном ниже plnkr -

Плунжер[^]

Вы также можете заглянуть в RxJs для более императивного последовательного решения.

GitHub-Reactive-Extensions/RxJS: реактивные расширения для JavaScript[^]

Дайте мне знать, если у вас возникнут вопросы.

Спасибо.


abc123aaaa

приложение.контроллер("myctrl", функция ($объем, $тайм-аут, $фильтр $м ) {

$область действия.функция АВС = ()
{

функция isPromiseLike(obj) {
вернуться в obj &&усилителя; угловые.isFunction(объект.тогда);
}
серийный номер({ task1, task2 });

функция последовательная(задачи) {
ВАР prevPromise;
var error = новая ошибка();
угловой.по каждому элементу(задачи, функции (задачи, ключевые) {
ВАР успех = задача.успех || задач;
ВАР не = задача.не;
ВАР сообщим = задача.сообщим;
ВАР nextPromise;

// Первая задача
если (! prevPromise) {
nextPromise = успех();
если (! isPromiseLike (nextPromise)) {
ошибка.сообщение = "задача" + ключ + " не возвращает обещание.";
выдает ошибку;
}
}
ещё
{
// Подождите, пока предыдущее обещание не будет решено или отклонено, чтобы выполнить следующую задачу

nextPromise = prevPromise.(
/ * успех* / функция (данные) {
if (! success) { return data; }
var ret = успех(данные);
если (! isPromiseLike(ret)) {
ошибка.сообщение = "задача" + ключ + " не возвращает обещание.";
выдает ошибку;
}
вернуться в отставке;
},
/ * сбой* / функция (причина) {
если (!не) { возвращение $делегата.отклонить(причина); }
var ret = fail(причина);
если (! isPromiseLike(ret)) {
ошибка.сообщение = "не для задач" + ключ + " не возвращает обещание.";
выдает ошибку;
}
вернуться в отставке;
},
уведомлять);
}
prevPromise = nextPromise;
});

return prevPromise | / $delegate.когда();
}


функция task1() {

ВАР д = $вопрос.отложить();
$timeout(функция () {
//некоторые задачи

д. решить();
}, 1000);
возвращение d. обещание;
}

функция task2() {

ВАР д = $вопрос.отложить();
$timeout(функция () {
//некоторые задачи

д. решить();
}, 1000);
возвращение d. обещание;
}
}
});

приложение cordova выходит на белый экран при использовании $q. defer в angularjs.Он отлично работает при работе в ripple, но не работает в устройстве.

Anurag Sharma

Можете ли вы поделиться журналом ошибок с Xcode или ADB terminal?

Рейтинг:
0

Konstantin A. Magg

Вы смотрели на асинхронный [^]?

Он доступен через npm / bower / etc. и имеет широкий спектр Определения Потока Управления [^], любить applyEach или waterfall.

Наверное, это помогает. И нет, я не буду делать кодирование для вас ;-)


abc123aaaa

я и об этом не прошу..