那么()和promise.success一样吗?

时间:2016-03-16 16:49:07

标签: angularjs promise angular-promise

承诺模式方法:

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(){});

他们俩都一样吗?

3 个答案:

答案 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倍之前,您使用的successerror方法是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函数使用。