首页 > 解决方案 > 节点获取 JSON 数据不可迭代

问题描述

我在TypeError: data.events is not iterable使用fetch从.JSONAPI

我很确定这是我处理下面代码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

标签: javascriptnode.jsfetch

解决方案


fetch() 返回一个承诺,因此data.events在承诺的 fetch 解决之前不存在。以这种方式编辑您的代码:

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);
      }
  }
});

推荐阅读