承诺模式方法:
plot1<-ggplot(d, aes(x, y)) +
geom_point(aes(size = OUT_VAR, alpha = OUT_VAR)) +
scale_size_continuous(breaks=c(-3, -2, -1, 0, 1, 2, 3, 4, 5, 6)) +
scale_alpha_continuous(breaks=c(-3, -2, -1, 0, 1, 2, 3, 4, 5, 6)) +
xlim(-4, 4) +
ylim(-4, 4) +
geom_segment(x = -4, xend = 4, y = 0, yend = 0) +
geom_segment(x = 0, xend = 0, y = -4, yend = 4) +
theme_classic() +
ggtitle("Plotting the value of the outcome
on the X, Y Plane") +
xlab("X Variable") +
ylab("Y Variable") +
theme(title = element_text(size = 14)) +
theme(legend.title = element_text(size = 9)) +
theme(axis.title.x = element_text(size = 12)) +
theme(axis.title.y = element_text(size = 12))
plot1
在控制器内调用它 -
this.getData= function(url){
var defer = $q.defer();
$http({method: 'GET', url: url}).
success(function(data, status){
defer.resolve(data);
})
.error(function(data, status) {
defer.reject(status);
});
return defer.promise;
};
VS
utility.getData().then(function(){});
他们俩都一样吗?
答案 0 :(得分:1)
然后得到第二个可选的函数参数,第一个是成功执行,第二个是失败:
promise.then(function () {
// success
}, function (err) {
// error
});
答案 1 :(得分:1)
由于$http
已经已经一个承诺,因此您需要更加复杂,因此您不应该使用$q
this.getData= function(url){
return $http({method: 'GET', url: url})
};
this.getData(urlToUse)
.then(function(res) {
// do something with res.data
})
.catch(function(err) { console.error(err); });
答案 2 :(得分:1)
作为Angular 1.5文件的状态
The $http legacy promise methods success and error have been deprecated. Use the standard then method instead. If $httpProvider.useLegacyPromiseExtensions is set to false then these methods will throw $http/legacy error.
$http
服务始终会返回承诺,但在1.4倍之前,您使用的success
和error
方法是promise.then(success, error)
的精简版。
除此之外,承诺符号真的更好,因为链接承诺的力量,使用回调符号并不优雅。类似的东西:
utility.getData().then(function(){
return utility.getMoreData();
}).then(function(response){
//do something if the data from second call
}).catch(function(err){
//something was wrong with one of the calls
});
通过一次通话,您可能看不到任何优势,但承诺确实可以防止de Callback-hell
除此之外,您的实用程序服务应返回de $ http promise,您不需要$ q。类似的东西:
this.getData= function(url){
return $http({method: 'GET', url: url});
};
如果你真的想在通话前操纵数据,你可以再次使用诺言的力量:
this.getData= function(url){
return $http({method: 'GET', url: url}).then(function(response){
data = processData(response);
return data;
});
};
数据将可供调用者的then
函数使用。