这是一个不好的方法吗?我基本上链接了promises,每次成功从服务器返回,都会启动一个新的http.get()以获取更多信息,但不会出现错误。如果它导致errorCallback,不再需要http.get();
$http.get(...).then(function() {
$http.get(...).then(function(){
$http.get(...).then(function(){}, function(){}),
function(){}); },
mainErrorCallback);
如果它不是" $ http.get()"它会有所作为吗?它确实" ViewsService.loadViews()"在
里面$http.get(...).then( function() { ViewsService.loadViews(); }, function(){ console.log("error"); }).
编辑:这就是我的意思,同步......似乎它有效,但代码需要清理/效率才能看起来更整洁:
http://jsfiddle.net/4n9fao9q/6/
(延迟的http请求):http://jsfiddle.net/4n9fao9q/26
答案 0 :(得分:2)
$http.get(...).then((res) => {
//res has data from first http
return $http.get(...);
}).then((res) => {
//res has data from second http
return $http.get(...);
}).then((res) => {
//res has data from third http
}).catch((err) => {
//exploded
});
我认为更清洁。你可以用任何返回promise的函数替换$ http.get。如果ViewsService.loadViews()返回一个promise,你可以使用它。
如评论中所述。
...
ViewsService.loadViews = function() {
//returns a promise
return $http.get(...);
}
OR
ViewsService.loadViews = function() {
return new Promise((resolve, reject) => {
$http.get(...).then((result) => {
//whatever
return resolve();
})
})
return $http.get(...);
}
使用loadViews的任何选项,您可以执行ViewsService.loadViers.then(etc)
答案 1 :(得分:1)
这是一个不好的方法吗?
除非您使用第一个请求的响应作为以下请求的输入,否则不是
这是一种非常有效的方法,因为每个请求都会被阻止,直到前一个请求返回为止。一个更好的
方法是使用$.all($http.get(...),$http.get(...))
嵌套调用(the pyramid of doom)很难阅读。由于每个呼叫都有相同的故障响应,您可以将这些呼叫链接起来。例如
`$http.get(..).then
($http.get(..)).then(
($http.get(..)).catch(errHander)`