【发布时间】:2022-02-14 00:50:59
【问题描述】:
我正在尝试使用 Hubspot 的 API 获取最新的博客文章,为此我必须使用 2 个端点(1 个用于博客文章,1 个用于每个博客文章的标签信息)。
第一次调用会带回最新的博客文章。然后,对于每篇博文,我需要检索该博文的标签信息。
以下是实现上述内容的代码,
async getBlogs(contentGroupID: string = null, limit: number = null) {
this.url = 'https://api.hubapi.com/cms/v3/blogs/posts?state=PUBLISHED&sort=-publish_date';
const posts = await useFetch(
this.url
+ '&hapikey=' + this.HS_API_KEY
+ (contentGroupID ? '&content_group_id=' + contentGroupID : null)
+ (limit ? '&limit=' + limit : null)
).then(response => {
return response;
});
const tags = (posts.data.value as any).results.map(post => fetch(`https://api.hubapi.com/blogs/v3/topics/${post.tagIds[0]+'?hapikey='+this.HS_API_KEY}`));
const taggs = await Promise.all(tags);
const payload = new Object();
payload['blogPosts'] = posts;
payload['tags'] = taggs;
return payload;
}
这是浏览器的响应
如上面的屏幕截图所示,blogPosts 对象已被很好地解析,但用于检索tagIds[0] 的Promise.all() 部分还没有。它返回[object Response]。
我尝试了几种不同的方法来做到这一点,每一种方法总是返回未解析的 Promise 对象。 执行此操作并获取实际数据的正确方法是什么?
仅举一个tag数据对象的示例,对于ID为41520763199的标签,其数据如下所示。这是我应该得到的响应而不是 promise 对象。
{
"categoryId": 3,
"contentIds": [],
"created": 1613125431347,
"deletedAt": 0,
"description": "",
"id": 41520763199,
"language": "en-us",
"name": "Case Studies",
"portalId": 2734675,
"slug": "case-studies",
"translations": {},
"updated": 1616091635999
}
【问题讨论】:
-
Fetch 返回一个 Response 对象,然后您必须使用例如
await fetch(...).then(r => r.json()),你也必须等待这个,因为.json()(或其他人)也会返回一个承诺。 -
@MrCodingB 谢谢,但这是我已经知道的,没有回答我的问题。我将如何解决我的问题?你还有什么要建议的吗?正如您在我的代码中已经看到的那样,我已经将
await用于Promise.all()。 -
我会写在我的答案中。评论太长了
-
谢谢,这将非常有帮助。
标签: typescript promise fetch nuxt.js hubspot