相关疑难解决方法(0)

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

AngularJS承诺,$ q,推迟

编辑

第一个答案是优雅的答案,但是,正如在这个问题中提到的几次以及有关stackoverflow的另一个问题,问题是服务和控制器在数据实际到达之前运行它们的东西.

(最后评论第一个答案:)

是的,问题是API调用在服务运行后完成并将所有内容返回给控制器,请参见此处screencast.com/t/uRKMZ1IgGpb7 ...这是我的基础问题,我怎么能等待数据的所有部分到到达?

这就像我说的是在重复,我们如何使该填充成功的数据检索后的阵列服务,并在控制器后,这一切让数据发生,因为你可以在我的截图中看到,事情在不同的运行订购.


我有这个代码:

 var deferred = $q.defer();
            $http.get('../wordpress/api/core/get_category_posts/?category_id=14 ').success(function(data) {
                //we're emptying the array on every call
                theData = [];
                catName = data.category.slug;
                theData = data;
                theData.name = catName;
                aggregatedData.push(theData);
            });
            $http.get('../wordpress/api/core/get_category_posts/?category_id=15 ').success(function(data) {
                theData = [];
                catName = data.category.slug;
                theData = data;
                theData.name = catName;
                aggregatedData.push(theData);
            });
            $http.get('../wordpress/api/core/get_category_posts/?category_id=16 ').success(function(data) {
                theData = [];
                catName = data.category.slug;
                theData = data;
                theData.name = catName;
                aggregatedData.push(theData);
            });
            $http.get('../wordpress/api/core/get_category_posts/?category_id=17 ').success(function(data) {
                theData = [];
                catName = data.category.slug; …
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs q

16
推荐指数
2
解决办法
3万
查看次数

AngularJS - 为什么用$ http承诺($ q)?

我在从jQuery转换几年后学习AngularJS.有些位更加直观.有些不是很多:).

我试图了解承诺的使用,特别是使用$ http的$ q,并且似乎没有太多关于这两个组合的信息,我可以找到.

为什么我会使用promises代替成功/错误回调?他们都在现实中使用回调,那么为什么承诺会更好?我可以设置get(...)如下函数:

function get(url, success, error) {
    success = success || function () {};
    error = error || function () {};

    $http.get(url)
        .success(function (data) {
            success(data);
        })
        .error(function (error) {
            error(error);
        });
}

get('http://myservice.com/JSON/',
    function () {
        // do something with data
    },
    function () {
        // display an error
    }
);
Run Code Online (Sandbox Code Playgroud)

哪个好(?)因为它让我可以完全控制正在发生的事情.如果我打电话,get(...)那么我可以在任何地方控制任何成功/错误get.

如果我将其转换为使用promises,那么我得到:

function get(url) {
    return $http.get(url)
        .then(function (data) {
            return data;
        },
        function (error) {
            return error;
        }); …
Run Code Online (Sandbox Code Playgroud)

deferred angularjs

11
推荐指数
1
解决办法
9689
查看次数

标签 统计

angularjs ×2

javascript ×2

promise ×2

q ×2

bluebird ×1

deferred ×1

es6-promise ×1