API извлечения Javascript в react-flux

Я изучаю flux-react-router-example @Dan Abramov, я уведомление в коде Fetch API здесь: API fetch имеет обещание возврата, внутри которого есть вложенный возврат:

return fetch(url).then(response =>
response.json().then(json => {
  const camelizedJson = camelizeKeys(json);
  const nextPageUrl = getNextPageUrl(response) || undefined;

  return {
    ...normalize(camelizedJson, schema),
    nextPageUrl
  };
})

);

Меня смущают эти вложенные возвраты, почему это используется здесь? Почему бы просто не вернуть response.json()?

Похоже, если я сделаю то же самое, я получу неопределенное значение


person Chrim    schedule 15.03.2016    source источник


Ответы (1)


JSON, полученный из ответа,

  1. преобразовано в camelCase с использованием humps
  2. не вложенные с использованием normalizr для упрощения обработки в сочетании с хранилищем избыточности
  3. дополнен URL-адресом следующей страницы, извлеченным из заголовка link

Дополнительные обсуждения и рассуждения о том, почему хранение вложенных объектов ответа в хранилище обычно является плохой идеей, можно найти на странице Группа Google React JS.

person Codepunkt    schedule 15.03.2016
comment
спасибо за ваш ответ, мне действительно любопытно, как работает оператор return в response.json(). Насколько я понимаю, это создаст неопределенное значение при использовании снаружи - person Chrim; 15.03.2016
comment
Запрос выполняется с использованием полифилла githubs fetch, основанного на полизаполняемые части спецификации whatwg fetch. методы тела, такие как text() и json(), возвращают обещания, дающие результаты, которые затем могут быть объединены в цепочку при использовании стандартной цепочки обещаний, что и происходит в этом примере. Короче говоря: возвращаемое значение вызова json() является обещанием. - person Codepunkt; 15.03.2016