使用 angular 服务链接 http.get 承诺
chaining http.get promises with angular service
这样做不好吗?我基本上是在链接承诺,其中每个成功的 return 来自服务器,启动一个新的 http.get() 以获取更多信息,但不是在它出错时。不再 http.get()s 如果它导致 errorCallback!
$http.get(...).then(function() {
$http.get(...).then(function(){
$http.get(...).then(function(){}, function(){}),
function(){}); },
mainErrorCallback);
如果它在
中 "ViewsService.loadViews()" 而不是 "$http.get()" 会有所不同吗
$http.get(...).then( function() { ViewsService.loadViews(); }, function(){ console.log("error"); }).
编辑:这就是我的意思,同步..它似乎有效,但代码需要 cleanup/efficency 看起来更整洁:
http://jsfiddle.net/4n9fao9q/6/
(有延迟的 http 请求):http://jsfiddle.net/4n9fao9q/26
$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
});
我觉得比较干净。您可以将 $http.get 替换为任何功能 returns 的承诺。如果ViewsService.loadViews() returns一个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(等)
这样做不好吗?
- 效率
除非您使用第一个请求的响应作为后续请求的输入,否则这不是
这是一种非常有效的方法,因为每个请求都将被阻塞,直到前一个请求返回。一个更好的
方法是使用 $.all($http.get(...),$http.get(...))
- 风格
嵌套调用 (the pyramid of doom) 难以阅读。由于每个调用都有相同的失败响应,您可以改为链接这些调用。例如
`$http.get(..).then
($http.get(..)).then(
($http.get(..)).catch(errHander)`
这样做不好吗?我基本上是在链接承诺,其中每个成功的 return 来自服务器,启动一个新的 http.get() 以获取更多信息,但不是在它出错时。不再 http.get()s 如果它导致 errorCallback!
$http.get(...).then(function() {
$http.get(...).then(function(){
$http.get(...).then(function(){}, function(){}),
function(){}); },
mainErrorCallback);
如果它在
中 "ViewsService.loadViews()" 而不是 "$http.get()" 会有所不同吗$http.get(...).then( function() { ViewsService.loadViews(); }, function(){ console.log("error"); }).
编辑:这就是我的意思,同步..它似乎有效,但代码需要 cleanup/efficency 看起来更整洁:
http://jsfiddle.net/4n9fao9q/6/
(有延迟的 http 请求):http://jsfiddle.net/4n9fao9q/26
$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
});
我觉得比较干净。您可以将 $http.get 替换为任何功能 returns 的承诺。如果ViewsService.loadViews() returns一个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(等)
这样做不好吗?
- 效率
除非您使用第一个请求的响应作为后续请求的输入,否则这不是
这是一种非常有效的方法,因为每个请求都将被阻塞,直到前一个请求返回。一个更好的
方法是使用 $.all($http.get(...),$http.get(...))
- 风格
嵌套调用 (the pyramid of doom) 难以阅读。由于每个调用都有相同的失败响应,您可以改为链接这些调用。例如
`$http.get(..).then
($http.get(..)).then(
($http.get(..)).catch(errHander)`