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

GraphQL Apollo Server resolver调用POST请求提前返回问题如何解决

问题原因

你当前使用回调模式调用facepp.post接口,JavaScript的事件循环机制不会等待回调函数执行完成再执行后续的return语句,因此返回时confidence还未被接口返回值赋值,只能拿到初始的undefined。
同时你已经为resolver声明了async关键字,只需要将回调调用转为Promise模式搭配await即可解决问题。

解决方案

将facepp.post的回调调用封装为Promise,await得到结果后再返回:

module.exports = {
    Mutation: {
        checkFace: async () => {
            console.log("Checking.....");

            const parameters = {
              image_url1: "link to image 1",
              image_url2: "link to image 2",
            };
            
            // 封装回调为Promise
            const confidence = await new Promise((resolve, reject) => {
                facepp.post("/compare", parameters, function (err, res) {
                    if (!err) {
                        resolve(res.confidence);
                    } else {
                        console.log(err);
                        reject(err);
                    }
                });
            })

            return confidence
        },
    },
};
额外说明
  • 如果facepp官方SDK已经支持Promise式调用,你可以直接省去手动封装的步骤,直接用await facepp.post(...)的写法获取返回值
  • 上述代码中如果接口调用失败会直接抛出错误,Apollo Server会自动将错误信息返回给客户端,你也可以根据业务需求在错误捕获逻辑中返回自定义的错误格式

内容的提问来源于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 04:45:01