代码之家  ›  专栏  ›  技术社区  ›  Darren

节点获取JSON数据不可iterable[重复]

  •  -1
  • Darren  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我犯了个错误 TypeError: data.events is not iterable 使用时 fetch 检索 JSON 数据来自 API .

    我很确定这是在我处理 JSON格式 在里面 for (const event of data.events) 从下面的代码,但我正在努力寻找一个修复。

    const data = fetch(url, {
        method: 'post',
        headers: new Headers({
            Authorization: 'Bearer ' + bearerToken,
           'Content-Type': 'application/json'
        })
    });
    
    for (const event of data.events) {
        let fileNode;
        try {
            fileNode = await createRemoteFileNode({
                url: logo.original.url,
                cache,
                store,
                createNode,
                createNodeId
             });
        } catch (error) {
            console.warn('error creating node', error);
        }
    }
    

    这个 JSON格式 当邮递员要求时 returned 作为

    {
        "pagination": {
            ...
        },
        "events": [
            {
                "name": "Example One",
                "logo": {
                    "original": {
                        "url": "exampleURL"
                    }
                }
            },
            {
                "name": "Example Two",
                "logo": {
                    "original": {
                       "url": "exampleURL"
                    }
                }
            }
        ],
        "location": {
            ...
        }
    

    }

    目标是 createRemoteFileNode 对于来自的每个事件 logo.original.url

    1 回复  |  直到 7 年前
        1
  •  2
  •   Scott Flodin    7 年前

    fetch()返回一个承诺,因此 data.events 直到承诺的解决得到解决才存在。以这种方式编辑代码:

    fetch(url, {
        method: 'post',
        headers: new Headers({
            Authorization: 'Bearer ' + bearerToken,
           'Content-Type': 'application/json'
        })
    }).then(function(data){
    
      for (const event of data.events) {
          let fileNode;
          try {
              fileNode = await createRemoteFileNode({
                  url: logo.original.url,
                  cache,
                  store,
                  createNode,
                  createNodeId
               });
          } catch (error) {
              console.warn('error creating node', error);
          }
      }
    });