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

module.exports导出的Promise函数无法正确返回resolve问题排查

问题原因

你在addPeers的实现逻辑中,调用完异步方法lnService.addPeer后,直接执行了return resolve(),这行代码会在lnService.addPeer的回调函数触发前就提前将Promise状态修改为已完成,因此你永远无法拿到异步添加节点操作的返回结果。而reject能正常触发是因为参数校验的逻辑是同步执行的,会在提前resolve之前就运行结束。

修复方案

删除最后多余的return resolve()即可,同时可以移除Promise构造函数中不必要的async标识(你当前逻辑没有用到await,加async无实际作用)。修复后的代码如下:

module.exports = args  => {
  return new Promise((resolve, reject) => {
    if (!args.pubkey) {
      return reject(new Error('404-ExpectedPubKey'));
    }
    
    if (!args.lnd) {
      return reject(new Error('404-ExpectedLndAuthentication'));
    }
    args.logger.info("inside this");
    const lnd = args.lnd;
    const id = args.pubkey;
    const str = id.split('@');
    const pubKey = str[0];
    const address = str[1];

    lnService.addPeer({ lnd, public_key: pubKey, socket: address }, (err, result) => {
      if(err) {
        return reject(err);
      }
      resolve(result);
    });
  });
};

补充说明

  • 所有异步操作的结果处理必须放在对应的回调逻辑中,不能在异步操作触发后直接修改Promise状态
  • 建议给回调内的reject加上return,避免异常触发后还执行后续多余逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:54:06