HttpRequest.getString命中错误函数,即使它成功



想知道这里是否有人可以帮忙?

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

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 nter的建议Zö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()?

此错误可能来自您的buildView。查询结果的索引为0 ~ 2,而不是1 ~ 3。

最新更新