javascript - 在 AngularJS 中使用 Promises 的 $http 调用的条件链接

标签 javascript angularjs angular-promise

我必须依次执行三个不同的 $http 调用,它们相互依赖。到目前为止,我的工作解决方案是这样的:

$http.get(".../1/...").success(function() {
    $http.get(".../2/...").success(function() {
        $http.get(".../3/...").success(function() {
            
        });
    });
});

现在需要做一些更改:如果条件为真,则应跳过第一个调用。我可以这样做:

if (skipCallOne) {
    $http.get(".../2/...").success(function() {
        $http.get(".../3/...").success(function() {
            
        });
    });
}
else {
    $http.get(".../1/...").success(function() {
        $http.get(".../2/...").success(function() {
            $http.get(".../3/...").success(function() {
                
            });
        });
    });
}

这显然会导致大量代码复制。如果我对特定的 $http 调用使用适当的函数,我发现这可以减少。但据我所知,更好的解决方案是使用 $http-promises 并正确链接它们,如下所示:

$http.get(".../1/...").then(function() {
    return $http.get(".../2/...");
}).then(function() {
    return $http.get(".../3/...");
}).then(function() {
    
});

但现在我的问题是,如何有条件地跳过代码复制最少的第一次调用?

最佳答案

你可以试试这个方法:

$q.when(skipCallOne || $http.get(".../1/..."))
  .then(function() {
    return $http.get(".../2/...");
  }).then(function() {
    return $http.get(".../3/...");
  }).then(function() {
});

关于javascript - 在 AngularJS 中使用 Promises 的 $http 调用的条件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056693/

相关文章:

javascript - 在鼠标输入时显示不同的 div

javascript - 使纹理的宽度适应其内容

javascript - ng-模式/ng-显示 AngularJS

javascript - 向 $q.all() 添加 promise

javascript - Angular : chaining promises over forEach loop

javascript - 图片上方的半透明div

javascript - 如何通过html()发送图像标签

angularjs - 如何从 Angular 中的过滤器输出 html

javascript - 标准输入未添加到 Angularjs 表单 $Scope

javascript - 循环包含 Promise 的数组