Я пишу приложение angularjs, полагаясь на promises, и хотя он работает, мне интересно, могу ли я сделать это более оптимально.
В начале кода я создаю обещание, которое отправляется для получения некоторых данных. Когда это будет сделано, я хочу запустить несколько функций, которые используют все эти данные. Функции прикреплены к несвязанным частям приложения, поэтому я не знаю порядка, в котором они привязаны к обещанию. Их также не нужно делать в последовательности.
app.service("Fetch", function ($q){
return function() {
var def = $q.defer();
somelibrary.asynccall(function(error, data){ //callback
if (error) def.reject(error);
else def.resolve(data);
});
return def.promise;
};
});
app.controller("ctrl", function ($scope, Fetch) {
var prom = Fetch();
//somewhere:
prom.then(function(data){$scope.var1 = data["VAR1"];});
//somewhere else:
prom.then(function(data){$scope.var2 = data["VAR2"]});
});
Основной недостаток заключается в том, что более поздние then
выполняются только тогда, когда предыдущие завершены, что здесь не нужно.
Кроме того, мне нужно добавить return data
внутри каждого function(data){...}
, в противном случае следующий then()
не имеет доступного data
.
Нет ли другого способа сделать это, более подходящего для этой ситуации?
EDIT: как упоминалось @jfriend00, я ошибся; фактически две функции работают параллельно, как только обещание успешно разрешено, и они не связаны цепью и поэтому не зависят друг от друга. Спасибо за вашу помощь.