异步函数如何等待内部异步函数的回调?
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 或 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);
})
})
}
我有一个异步函数,当内部异步函数的回调 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 或 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);
})
})
}