异步函数如何等待内部异步函数的回调?

How can an async function await the callback of an inner async function?

我有一个异步函数,当内部异步函数的回调 return 时必须 return。我不能等待那个内部函数,因为它没有 return 承诺。我试过在传递回调时指定 await 但这并不能解决问题。因此:

async getPublicKey(): Promise<string> {

    const callback = async (err: any, key: any) => {
      if (!err) this.publicKey = key.result;
      else console.error(err);
    };

    this.web3js.currentProvider.sendAsync({
      jsonrpc: '2.0',
      method: 'eth_getEncryptionPublicKey',
      params: [this.account],
      from: this.account,
    }, callback);

    return this.publicKey
  }

这里的目标是returnkey.result的回调函数。但是,我们不能立即等待该回调和 sendAsync 函数 return(不能等待)。

您需要将回调包装在 new Promise 和 return 或 resolvereject 中。这样,您可以 await 您对 await getPublicKey() 的调用,并且在回调完成之前不会解析。

async getPublicKey(): Promise<string> => {
  return new Promise((resolve, reject) => {
    const callback = async (err: any, key: any) => {
      if (!err) {
          resolve(key.result);
      }
      else {
        reject(err);
      }
    };

    this.web3js.currentProvider.sendAsync({
      jsonrpc: '2.0',
      method: 'eth_getEncryptionPublicKey',
      params: [this.account],
      from: this.account,
    }, callback);

    })
  })
}