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

如何返回Promise或终止Promise链?附代码实现疑问

问题解答

1. 终止Promise链的返回值

当检测到参数不合法时,你需要返回被拒绝的Promise(Promise.reject()),这样Promise链会直接跳过后续的then回调,进入catch块,从而终止链的执行。

修正后的函数代码:

function getThumbnailFromClips(res, clips) {
  // 注意:原代码中var clips = content.clips;属于笔误,content未定义,应直接使用传入的clips参数
  if (clips.length === 0) {
    return Promise.reject(new Error("Empty playlist"));
  } else {
    const pick1 = Math.floor(Math.random() * clips.length);
    const sql1 = `SELECT <details omitted>`;
    return client.query(sql1);
  }
}

2. 最外层处理HTTP响应更规范

是的,由最外层调用者(即app.post的回调函数)处理400状态码返回更规范,原因如下:

  • 解耦业务与HTTP逻辑:getThumbnailFromClips作为业务函数,只需专注处理业务逻辑、返回Promise(成功或失败状态),无需关心HTTP响应细节,这样函数复用性更强,在非HTTP场景也能调用。
  • 统一错误处理:所有错误可在最外层catch块统一处理,避免在多个业务函数中重复编写响应代码,便于后续维护。

调整后的外层调用代码:

app.post("/foo", (req, res) => {
  getClips(req)
    .then((clips) => getThumbnailFromClips(clips)) // 移除res参数,让业务函数更纯粹
    .then((result) => createDatabaseEntry(result))
    .then(() => {
      res.status(200).send("操作成功");
    })
    .catch((err) => {
      if (err.message === "Empty playlist") {
        res.status(400).send(err.message);
      } else {
        res.status(500).send("服务器内部错误");
      }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:24:59