You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.map中使用await导致父级await功能失效的问题排查

解决async map导致RSS生成时数据未解析的问题

问题根源

你在fetchFeed里使用async函数作为map的回调,这会让map返回一个由Promise对象组成的数组,而非解析后的文章数据数组。直接返回这个数组时,外部的await仅会等待fetchFeed函数执行完毕,并不会等待数组里的所有Promise完成解析,导致rss()执行时拿到的还是未resolved的Promise,自然无法获取文章属性。

修复代码

修改fetchFeed函数,使用Promise.all()等待所有异步操作完成:

export const fetchFeed = async function () {
  // import.meta.glob是同步方法,无需await
  const allPosts = import.meta.glob("./../pages/**/*.md");
  
  // 生成所有文章的加载Promise
  const postPromises = Object.values(allPosts).map(async (postData) => {
    const post = await postData();
    return { ...post.frontmatter, url: post.url };
  });

  // 等待所有Promise解析完成,得到最终文章数组
  const posts = await Promise.all(postPromises);
  return posts;
};

关键细节说明

  1. import.meta.glob无需await:它是同步函数,直接返回包含模块加载器的对象,之前的await是多余的。
  2. async map的特性:带async的map回调会让每个迭代项变成Promise,所以map结果是Promise[],必须用Promise.all()批量等待所有Promise完成。
  3. 外部await的作用:修改后,await fetchFeed()会拿到完全解析后的文章数组,此时rss()里的posts.map就能正常读取title、url等属性。

你的rss.xml.js代码无需修改,保持原样即可正常工作。

内容的提问来源于stack exchange,提问作者Alim Bolar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:45:37