我有一个异步函数,它必须在内部异步函数的回调返回时返回。我不能等待那个内部函数,因为它不返回承诺。我试过在传递回调时指定 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
函数会立即返回(无法等待)。
答案 0 :(得分:1)
您需要将回调包装在 new Promise
中并返回 resolve
或 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);
})
})
}