首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棱角承诺:最佳实践和不同技术的Pros/Cons

棱角承诺:最佳实践和不同技术的Pros/Cons
EN

Stack Overflow用户
提问于 2015-05-12 23:17:52
回答 1查看 2.2K关注 0票数 4

我正在学习角,我遇到了两种方法来打电话,回报承诺。我想知道一种方法是否比另一种更好,以及/或您何时使用这两种方法。

第一技术:

代码语言:javascript
复制
function getSomeDataFromServer() {
    var deferred = $q.defer();

    if (myData) {
        // call to backend was previously made and myData is already loaded 
        deferred.resolve(myData);
    } else {
        // get data from server
        $http.get(my_url_endpoint).then(function(response) {
            // cacheResult() will set myData = response.data
            deferred.resolve(cacheResult(response));
        });
    }

    return deferred.promise;
}

第二技术:

代码语言:javascript
复制
function getSomeDataFromServer() {

    if (myData) {
        // call to backend was previously made and myData is already loaded 
        return $q.when(myData);
    } else {
        // get data from server
        return $http.get(my_url_endpoint).then(function(response) {
            // cacheResult() will set myData = response.data
            return cacheResult(response);
        });
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 23:36:28

总是喜欢第二种选择。第一种选择是一种反模式,当开发人员不完全理解承诺的本质时,通常会看到这种模式。延迟对象(var deferred = $q.defer();)使用当您有一些使用回调但需要使用基于承诺的代码的异步代码时

您在角返回中所做的大多数异步操作都是承诺的,因此通常只在使用依赖回调的第三方库时才使用延迟。

在本例中,$http本身返回一个承诺,因此创建一个新的延迟对象是不必要的。返回$http承诺本身就足够了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30203063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档