首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接ngResource承诺

链接ngResource承诺
EN

Stack Overflow用户
提问于 2015-10-19 09:32:00
回答 2查看 268关注 0票数 3

我正在使用REST,它提供了非嵌套的资源API。这导致了连锁电话,我想作出的承诺。我从角度上使用ngResource,我在链接调用方面有问题。这个想法是首先得到一个活动元素的描述。在这里,我请求一个JSON,响应如下:

代码语言:javascript
复制
{id : 0, block : [0,3,4]} 

在我得到这些信息之后,我尝试获取有关块的数据。实现如下所示:

代码语言:javascript
复制
Element.get({'id':state.elementID}).$promise.then( function(element) {
            // Element hast block entry with array of belonging blockIDs
            angular.forEach(element.block, function(blockId){
                // Get all the Blocks, that have the defined ID ( Foreign key)
                return Block.get({'id':blockId}).$promise;
            });
        }).then(function(block){
            // Create an element and ADD it to the model
            var uiElem = new UIElem(block.id, "#",block.name, "block");
            $scope.list.push(uiElem);
            angular.forEach(block.parameter, function(element){
                /// Chain other calls...
                .......

            });
        })

第二个得到未定义块的问题,尽管GET调用从服务器获得一个正确的JSON。

我想知道我是不正确地使用了承诺的链,还是我使用了错误的元素

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-19 09:42:35

你没有正确地把你的承诺捆绑在一起。对于每个块,立即向服务器发送另一个请求。

使用$q.all进行链接:

代码语言:javascript
复制
    // Element hast block entry with array of belonging blockIDs
    return $q.all(element.block.map(function(blockId){
        // Get all the Blocks, that have the defined ID ( Foreign key)
        return Block.get({'id':blockId}).$promise;
    }));

这将在这里给出生成块的数组:}).then(function(blocks){...

票数 1
EN

Stack Overflow用户

发布于 2015-10-19 09:38:23

链接的承诺使用前一个承诺的结果作为输入。你在第一次承诺中没有回报,因此第二次接受未被定义为它的块。

您应该返回元素或任何与您的第一个承诺相关的内容。

这在$q文档中有描述。

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

https://stackoverflow.com/questions/33211057

复制
相关文章

相似问题

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