首页 > 解决方案 > 编辑承诺结果 (JavaScript)

问题描述

我想编辑一个 res.json 什么回调(Promise.then)结果是这样的关联数组“{category:”tennis”,data:res.json()}”

然后我想得到一个没有 Promise 类型的它

我试过了,但它返回了 Promise Type

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.log(responses);
  return Promise.all(responses.map(res=> {
     console.log(res.json()) <- this is not Promise
  return(
  {category:"tennis",data:res.json()}  <- this is  Promise


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

标签: javascriptpromise

解决方案


因为fetch返回一个 Promise,并且使用.json()(或.text(),等)使用该 Promise 会给您另一个Promise,所以您需要调用.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.log(value))

推荐阅读