多个`.then()`在单个的angularjs承诺 – 所有使用_original_数据

我正在写一个依赖于promise的angularjs应用程序,虽然它正在工作,但我不知道是否可以做得更好。

在代码的开始,我创build了一个承诺,取消一些数据。 当这样做完成后,我想运行几个都使用这个数据的函数。 这些函数附加在应用程序的不相关部分,所以我不知道它们附在promise上的顺序。 他们也不需要依次完成。

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"]}); }); 

这里的主要缺点是只有在前面的结束时才执行,这在这里是不必要的。

此外,我需要在每个function(data){...}内添加return data ,否则以下then()不具有可用的data

有没有另外的方法来做到这一点,更适合这种情况?


编辑:正如@ jfriend00提到的,我错了; 事实上这两个function都是在承诺成功解决的同时并行运行的,而且它们之间没有链接,因此也不相互依赖。 谢谢你的帮助

把我的意见转化为一个答案,因为它似乎清楚了这个问题:

在你的模式下,当promise被parsing时,两个相同的promise的调用将会被一个接一个的调用。 第二个.then()只与原来的承诺有关,而与第一个.then()没有任何关系。

这些没有链接,所以第二个.then()不依赖于从第一个.then()返回的内容.then()并且两个都将传递相同的数据。 他们只是同一个承诺的多个观察者,就像两个事件处理程序在监听相同的事件。

对同一个promise的两个.then()处理程序将按照它们附加到promise的顺序进行调用,并且都将传递相同的数据。

看到这两个答案:

那么承诺是否有所不同呢? promise.then

了解JavaScript的承诺; 堆栈和链接

p.then(...).then(...)分支 p.then(...); p.then(...) p.then(...); p.then(...)与承诺。

你需要并行执行: $ q.all()

 $q.all( function1, function2, function3 ).then(function(responses) { console.log(responses); });