一尘不染

单个angularjs上的多个`.then()`承诺-全部使用_original_数据

angularjs

我正在编写一个基于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,在此没有必要。

另外,我需要return data在每个中添加function(data){...},否则以下内容then()data不可用。

没有其他方法可以更适合这种情况吗?


编辑:如@ jfriend00所述,我误会了;实际上,一旦成功解决了诺言,这两个功能便会并行运行,并且它们没有链接在一起,因此彼此之间不依赖。谢谢你的帮助


阅读 249

收藏
2020-07-04

共1个答案

一尘不染

将我的评论变成答案,因为它似乎可以解决问题:

在您的模式下,.then()对同一诺言的两个调用将在诺言被解决时一个接一个地被调用。第二个.then()与最初的承诺无关,与第一个发生的事情无关.then()

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

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

以获得更多关于 p.then(...).then(...)分支的 信息p.then(...); p.then(...)

2020-07-04