javascript - 异步函数如何等待内部异步函数的回调?
问题描述
我有一个异步函数,当内部异步函数的回调返回时必须返回。我不能等待那个内部函数,因为它没有返回一个承诺。我已经尝试指定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
函数会立即返回(不能等待它)。
解决方案
您需要将回调包装在 a 中new Promise
并返回resolve
or reject
。这样,您可以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);
})
})
}
推荐阅读
- python - Scrapy 选择器上的 extract_first() 和 extract() 方法没有返回相同的值
- swift - eduroam 上的 URLSession GET 请求失败
- android - Android Studio 中的调试不再起作用
- memory - ROM硬件实现中的两个指针
- javascript - 动态表中的求和列
- discord.py - 将机器人分配给单通道 discord.py
- c++ - 需要加倍 sprintf 格式并返回太长的字符串
- php - Laravel 关系查询在哪里使用数组
- batch-file - 计算子目录中的子目录数
- javascript - ENABLE_NOTIFICATION_VALUE - 网络蓝牙 API