无法在 module.exports 内的 promise 函数中返回解析

Posted

技术标签:

【中文标题】无法在 module.exports 内的 promise 函数中返回解析【英文标题】:Unable to return resolve in promise function inside module.exports 【发布时间】: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();
  );
;

【问题讨论】:

【参考方案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`)
        )
    );
;

【讨论】:

以上是关于无法在 module.exports 内的 promise 函数中返回解析的主要内容,如果未能解决你的问题,请参考以下文章

是否可以 module.exports 从异步函数中导出局部变量?

export、export default 、module.exports详解

module.exports 与 exports区别

module.exports和exports

Commonjs规范中module.exports和exports的区别

module.exports 与 exports