I have an rss.xml.js file that runs this script in a project using the astro framework.
import rss from "@astrojs/rss";
import { fetchFeed } from "../lib/api";
export async function get(context) {
const posts = await fetchFeed();
return rss({
title: "My Online Store",
description: "Online For Everyone",
site: context.site,
items: posts.map((post) => ({
title: post.title,
pubDate: Date.now(),
description: post.description,
// customData: post.data.customData,
// Compute RSS link from post `slug`
// This example assumes all posts are rendered as `/blog/[slug]` routes
link: post.url,
})),
});
}
normally the fetchFeed function has its await
functionality and it works fine. However in this particular case I had to make the map
method too as an async. That, to me, seems to be the only difference between my previous site, where this worked and the current one, where it's not working.
export const fetchFeed = async function () {
const allPosts = await import.meta.glob("./../pages/**/*.md");
// console.log("allPosts", allPosts);
const posts = Object.values(allPosts).map(async (postData) => {
const post = await postData();
// console.log("inside", post.frontmatter);
return { ...post.frontmatter, url: post.url };
});
return posts;
};
When I console.log the posts (in the rss.xml.js) I realise that posts
doesn't exist as the fetchFeed function call is not yet resolved. And it resolves after the rss() function has been called.
I assumed the await
keyword would delay the return till it was resolved... but that's not what is happening.
Could someone help me and point out what I am doing wrong? I am not very good with Promises and I would appreciate some help.
Regards,
Alim