我正在编写一个基于Promise的angularjs应用程序,尽管它工作正常,但我想知道是否可以将其做得更好。
在代码的开头,我正在创建一个承诺,以获取一些数据。完成此操作后,我要运行几个都使用此数据的函数。这些功能附加在应用程序的无关部分上,因此我不知道将它们附加到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"]}); });
此处的主要缺点是,then仅当前一个结束时才执行后一个s,在此没有必要。
then
另外,我需要return data在每个中添加function(data){...},否则以下内容then()将data不可用。
return data
function(data){...}
then()
data
没有其他方法可以更适合这种情况吗?
编辑:如@ jfriend00所述,我误会了;实际上,一旦成功解决了诺言,这两个功能便会并行运行,并且它们没有链接在一起,因此彼此之间不依赖。谢谢你的帮助
将我的评论变成答案,因为它似乎可以解决问题:
在您的模式下,.then()对同一诺言的两个调用将在诺言被解决时一个接一个地被调用。第二个.then()与最初的承诺无关,与第一个发生的事情无关.then()。
.then()
这些没有链接,因此第二个.then()不依赖于从第一个返回的内容,.then()并且两者都将传递相同的数据。他们只是具有相同承诺的多个观察者,就像两个事件处理程序正在监听同一事件一样。
.then()相同诺言的两个处理程序将按照它们附加到诺言的顺序被调用,并且都将传递相同的数据。
以获得更多关于 链 p.then(...).then(...)与 分支的 信息p.then(...); p.then(...)。
p.then(...).then(...)
p.then(...); p.then(...)