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

如何在GraphQL中返回POST请求响应:解决resolver提前结束无法获取facepp结果问题

问题根因

你使用的facepp.post是回调模式的异步方法,当前代码里async resolver没有等待回调执行完成就提前返回了confidence变量,此时回调逻辑还未触发,confidence还处于未赋值的初始状态,所以拿不到返回结果。

修复方案

方案1:使用util.promisify转换回调为Promise(推荐)

Node.js内置的util.promisify可以直接把符合标准回调格式(最后一个参数是(err, res)格式的回调)的方法转为返回Promise的方法,配合async/await使用即可:

const { promisify } = require('util');
// 绑定facepp上下文避免运行时this指向错误
const faceppPost = promisify(facepp.post.bind(facepp));

module.exports = {
  Mutation: {
    checkFace: async () => {
      console.log("Checking.....");
      const parameters = {
        image_url1: "link to image 1",
        image_url2: "link to image 2",
      };
      try {
        // 等待异步接口返回结果
        const res = await faceppPost("/compare", parameters);
        return res.confidence;
      } catch (err) {
        return "There was an error";
      }
    },
  },
};

方案2:手动封装Promise

如果不想引入额外工具,也可以手动把回调逻辑封装到Promise里直接返回,async resolver会自动等待Promise完成后再返回最终结果:

module.exports = {
  Mutation: {
    checkFace: async () => {
      console.log("Checking.....");
      const parameters = {
        image_url1: "link to image 1",
        image_url2: "link to image 2",
      };
      return new Promise((resolve) => {
        facepp.post("/compare", parameters, function (err, res) {
          if (!err) {
            resolve(res.confidence);
          } else {
            resolve("There was an error");
          }
        });
      })
    },
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:05