HttpRequest.getString即使成功也会遇到错误函数

时间:2014-05-01 21:48:23

标签: json dart dart-polymer polymer

想知道这里有人可以提供帮助吗?

使用Polymer Dart我已经设置了一个服务来使用以下代码加载Json feed:

Future loadService(){
    return HttpRequest.getString(_serviceURL)
    .then(buildView)
    .catchError(handleError);
}        

当执行此代码时,它确实成功点击了我的buildView函数,但是我也从我的句柄错误函数中打印出错误:

void handleError(Error error){
    print(error);
}

我的json Feed中有3个项目:

[
  {
    "module": "module-1",
    "data": {
      "title": "Dynamic Title 1",
      "text": "This is the dynamic text for content block 1."
    }
  },
  {
    "module": "module-2",
    "data": {
      "title": "Dynamic Title 2",
      "text": "This is the dynamic text for content block 2."
    }
  },
  {
    "module": "module-3",
    "data": {
      "title": "Dynamic Title 3",
      "text": "This is the dynamic text for content block 3."
    }
  }
]

我得到的错误是:“RangeError:3”。

我找不到很多关于可能导致这种情况的信息。它似乎并没有阻碍我的应用程序,但我想尽可能清除它。如果有人有任何建议,我会全力以赴。

谢谢!

编辑:根据GünterZöchbauer的建议

现在我明白.catchError()函数会从.then()函数中捕获错误。我认为它只会捕获HttpRequest本身失败的错误。

在buildView中,我使用for循环遍历json对象:

void buildView(String jsonString){

    contentBlocks = JSON.decode(jsonString);        
    DivElement wrapper = $['content-modules-wrapper'];

    for(int i=0; i < contentBlocks.length; i++){
      Element element = new Element.tag(contentBlocks[i]['module']);
      wrapper.children.add(element);
    }
}

哪个是错的,因为.length接受JSON字符串长度(300个字符)我觉得有点奇怪,因为我已经将它转换为对象..无论如何,我通过将函数更改为此来修复它:

void buildView(String jsonString){

    contentBlocks = JSON.decode(jsonString);        
    DivElement wrapper = $['content-modules-wrapper'];

    contentBlocks.forEach((block){
      Element element = new Element.tag(block['module']);
      wrapper.children.add(element);
    });
}

有没有办法像我想要的那样获取json对象中的项目数,或者你应该总是使用forEach()来循环它?

1 个答案:

答案 0 :(得分:2)

此错误可能来自您的buildView。结果的索引是从0到2而不是从1到3。