Я хочу отредактировать 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
Вы можете полностью заменить первую часть на const promise = fetch("http://localhost:100/api/v1/categories/map").then(response => response.json())
, потому что fetch уже возвращает промис, и именно так работают промисы.
Если каждый вызов categoriescategory=tennis
не возвращает что-то другое, похоже, что вы сопоставляете массив value.category
, но не используете ни одно из его значений? Переменная category
не используется. Это предназначено? Похоже, вы можете просто сделать запросы два, а не один запрос, за которым следует запрос для каждого элемента в category
Кто-то на самом деле использует resolve
как resolve
, а не fulfill
:O
Поскольку 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))
это моя ошибка, поэтому я собираюсь отредактировать это!!