Изменить результат Promise (JavaScript)

Я хочу отредактировать res.json, какой результат обратного вызова (Promise.then) является ассоциативным массивом, подобным этому "{category:"tennis",data:res.json()}"

тогда я хочу получить его без типа Promise

Я попробовал это, но он вернулся с типом обещания

const promise = new Promise(function(resolve,reject) {
  fetch("http://localhost:100/api/v1/categories/map").then(response
    => resolve(response.json()))
});





promise.then(value => Promise.all(value.category.map(
  category => {
     return (fetch("http://localhost:100/api/v1/categoriescategory=tennis"))
  }
))
.then(responses => {console.info(responses);
  return Promise.all(responses.map(res=> {
     console.info(res.json()) <- this is not Promise
  return(
  {category:"tennis",data:res.json()}  <- this is  Promise


)
} )
)}))
.then(value=>console.info(value)) // {{category:"tennis",Promise{data:data}} <- i want to unwrap Promise

это моя ошибка, поэтому я собираюсь отредактировать это!!

Naoya 31.05.2019 07:13

Вы можете полностью заменить первую часть на const promise = fetch("http://localhost:100/api/v1/categories/map").then(res‌​ponse => response.json()), потому что fetch уже возвращает промис, и именно так работают промисы.

slebetman 31.05.2019 07:14

Если каждый вызов categoriescategory=tennis не возвращает что-то другое, похоже, что вы сопоставляете массив value.category, но не используете ни одно из его значений? Переменная category не используется. Это предназначено? Похоже, вы можете просто сделать запросы два, а не один запрос, за которым следует запрос для каждого элемента в category

CertainPerformance 31.05.2019 07:23

Кто-то на самом деле использует resolve как resolve, а не fulfill :O

Benjamin Gruenbaum 31.05.2019 11:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
862
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку fetch возвращает промис, а использование этого промиса с .json() (или .text() и т. д.) дает вам промис еще один, вам нужно вызвать .then дважды; поместите еще один .then в свою начальную функцию сопоставления, точно так же, как вы делаете с вашим первоначальным const promise. Вам также следует избегать явный антишаблон построения промисов:

const promise = fetch("http://localhost:100/api/v1/categories/map").then(response => response.json());

promise.then(value => Promise.all(value.category.map(
  category => {
    return fetch("http://localhost:100/api/v1/categoriescategory=tennis")
      .then(response => response.json());
      // ^^^^^^^^^^^^^^^^^^^^^^^^^
  }
))
.then(responseObjects => {
  return Promise.all(responseObjects.map(responseObject => {
    return {
      category: "tennis",
      data: responseObject
    }
  }))
}))
  .then(value => console.info(value))

Другие вопросы по теме