javascript - 编辑承诺结果 (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
解决方案
因为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))
推荐阅读
- javascript - 在文本框中添加逗号分隔词并执行功能
- c++ - 如何在 C++ 中的同一函数中使用字符串和双精度数
- java - 搜索树形图,然后按顺序遍历所有大于某个键的条目
- python - 如果给定字符串在任何子列表中,则返回子列表的第一个索引
- android - Android\iOS 强制断开所有应用的 BLE 设备
- php - 单击 PHP 中的项目时如何获取更多信息?
- javascript - 如何在 ExpressJS 中的 HTML 表单上添加值
- atom-editor - Atom 编辑器:Hashtag 创建括号 - JavaScript 编辑
- bash - 使用 perl 就地替换将软链接/符号链接更改为静态文件
- c++ - stod 转换一些 sig 无花果被切断