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

时间:2021-07-14 03:09:31

标签: javascript typescript asynchronous async-await es6-promise

我有一个异步函数,它必须在内部异步函数的回调返回时返回。我不能等待那个内部函数,因为它不返回承诺。我试过在传递回调时指定 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
  }

这里的目标是返回回调函数的key.result。但是,我们无法等待该回调,sendAsync 函数会立即返回(无法等待)。

1 个答案:

答案 0 :(得分:1)

您需要将回调包装在 new Promise 中并返回 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);

    })
  })
}