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

遍历进程列表并推入对象后,GraphQL客户端/前端返回null数组的问题求助

遍历进程列表并推入对象后,GraphQL客户端/前端返回null数组的问题求助

嘿,我看了你的代码和问题描述,这里有几个可能的问题点,帮你梳理一下:

首先,你代码里的await list.forEach(...)完全是无效操作——forEach根本不返回Promise,所以await它不会等任何异步任务完成。如果你的list是通过异步方法获取的,你应该先await获取list本身,而不是await forEach循环:

// 先确保正确拿到进程列表(假设获取list的方法是异步的)
const list = await getProcessesList(); 
let results = [];

list.forEach((process) => {
  results.push({
    name: process.name,
    created_at: process.pm2_env.created_at,
    pm_uptime: process.pm2_env.pm_uptime,
    status: process.pm2_env.status,
    memory: process.monit.memory,
    cpu: process.monit.cpu
  });
});

然后,你后面的const contents = await Promise.all(results);也是多余的——results里都是普通的对象,不是Promise实例,Promise.all对它毫无作用,contents和results完全是同一个数组。

接下来,说说为什么前端/GraphQL会拿到null:

  • 异步流程错误:如果你的list没有被正确异步获取(比如没加await),那forEach循环可能是在空数组上执行的,results自然是空数组,GraphQL如果预期非空数组的话可能返回null。
  • 嵌套属性不存在:比如某个进程的pm2_env或者monit是undefined/null,直接访问process.pm2_env.created_at会报错,导致整个对象生成失败,最终数组里可能混入错误或undefined,GraphQL解析时就会转为null。
  • Resolver返回问题:你的GraphQL resolver可能忘记返回results数组,或者返回了undefined,前端就会拿到null。

给你几个具体的修复建议:

1. 改用map生成数组(更简洁可靠)

没必要手动push,直接用map生成结果数组,代码更清晰,同时加空值防护:

// 先确保获取到list
const list = await getProcessesList();

// 用map生成结果,同时加可选链防止嵌套属性不存在
const results = list.map(process => ({
  name: process.name ?? '未知进程',
  created_at: process.pm2_env?.created_at ?? null,
  pm_uptime: process.pm2_env?.pm_uptime ?? null,
  status: process.pm2_env?.status ?? 'unknown',
  memory: process.monit?.memory ?? 0,
  cpu: process.monit?.cpu ?? 0
}));

这里用?.可选链防止嵌套属性不存在时报错,??空值合并运算符给字段设置默认值,避免出现undefined。

2. 检查GraphQL Resolver的返回

确保你的resolver正确返回了results数组,比如:

// 示例Resolver
async function processListResolver() {
  const list = await getProcessesList();
  const results = list.map(...); // 上面的map逻辑
  return results; // 一定要返回这个数组!
}

如果resolver没有return,或者return了undefined,GraphQL就会返回null给前端。

3. 排查list是否正确获取

在生成results之前,先console.log(list)确认它确实是包含进程数据的数组,而不是空数组或undefined。

按照这些步骤排查一下,应该就能解决前端拿到null的问题啦!

备注:内容来源于stack exchange,提问作者Stephanie Cherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:58:14