【问题标题】:Unable to return resolve in promise function inside module.exports无法在 module.exports 内的 promise 函数中返回解析
【发布时间】:2021-09-03 10:24:14
【问题描述】:

我正在尝试从 module.exports 承诺函数返回 resolve()。 我这样称呼它:

prog
  .version('1.0.0')
  .command('addpeer')
  .argument('<pubkey>', 'Enter the pubkey (pubkey@address)')
  .action((args, options, logger) => {
        return addPeers({
          logger,
          pubkey: args.pubkey,
          lnd: lnd,
        },
        );
  })

从那里转到另一个文件,其中定义了所有 module.exports: 它从这里找到要转到的文件。我正在调用 addPeers 文件。

const importLazy = require('import-lazy')(require);
const listPeers = importLazy('./listPeers.js');
const addPeers = importLazy('./addPeer.js')
const getChannels = importLazy('./getChannels.js')
const openChannels = importLazy('./openChannel.js');
const lnurl = importLazy("./lnurl");
const AddPeer_OpenChannel = importLazy('./AddPeer_OpenChannel.js');

module.exports = {
  lnurl,
  listPeers,
  addPeers,
  getChannels,
  openChannels,
  AddPeer_OpenChannel
};

从那里到这里,现在我不明白如何在这里返回 Resolve,我可以返回拒绝但不能返回 resolve。

module.exports = args  => {
  return new Promise(async (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)
      reject(err);
      else
      resolve(result);
  });


    return resolve();
  });
};

【问题讨论】:

    标签: node.js


    【解决方案1】:

    你不会从 promise 回调中“返回”。你调用resolve() 或reject(),你不调用return resolve()。只需resolve()

    【讨论】:

      【解决方案2】:

      确保callback 被执行并且只使用resolve。以下是示例 sn-p:

      class SampleClass {
          add(a, b, cb) {
              a + b;
              cb();
          }
      }
      const obj = new SampleClass();
      
      module.exports = args => {
          return new Promise(async (resolve, reject) => {
              if (!args.pubkey) {
                  reject(new Error('404-ExpectedPubKey'));
              }
      
              if (!args.lnd) {
                  reject(new Error('404-ExpectedLndAuthentication'));
              }
              console.info("inside this");
              obj.add(1, 2, (err,res)=>{
                  if(err) reject(err)
                  resolve(`Resolved: ${res}`)
              })
          });
      };
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-03
        • 2021-11-28
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        相关资源
        最近更新 更多