JS Fetch API很奇怪

时间:2018-12-01 18:44:26

标签: javascript json fetch es6-promise flickr

我正在尝试使用Flickr API在网站上显示一些公共照片。但是我遇到了一些我绝对无法发现的错误。 最奇怪的是,代码在几天前运行良好,调试显示查询按预期进行。问题似乎在于解决fetch()返回的承诺。

function getPhotos(){
  const url = `${URL}${queryString('getPhotos')}`;
  fetch(url)
    .then((resp) => {
      const w = resp.json();
      return w;
      // get different results if with
      // return resp.json();
    });
}

在此调试调试中,使用uncommented方法,promise的状态最终会实现。看着json对象,我可以看到下面的所有照片。 如果我确实直接返回resp.json(),则返回undefined

async function generatePhotos(list) {
  const list = await getPhotos();
  list.then((resp) => {
    // always get 'list is undefined' error
    // JSON.parse(list);
    const photos = resp.photo;
    for (let i = 0; i < 3; i++) {
      generateImgElem(photos[i].id);
    }
  });
}

无论getPhotos()返回什么,此函数都将无法工作,诺言总是以待处理状态出现。

我在这里做错了什么?我搜索了一堆,据我所知,我正在正确地使用提取API。

编辑: 我收到变量列表未定义的错误。

function getPhotos(){
  const url = `${URL}${queryString('getPhotos')}`;
  fetch(url)
    .then((resp) => {
      return resp.json();
    });
    // passes in undefined whether I stringify or not
    // .then((json) => {
    //   return JSON.stringify(json);
    // });
}

1 个答案:

答案 0 :(得分:0)

尝试

async function getPhotos(url) {
  const response = await fetch(url);
  const json = await response.json();
  return json;
}

当您执行提取请求时,将需要一些时间来返回某些内容。 因此,您很可能会返回未完成的承诺。 使用异步将确保提取请求已完成。

将其变成一个对象。

  

@gunnnnii阻止您执行操作的原因是让myObject =   JSON.parse(stringifiedThing);? –阿迪1分钟前