#javascript #typescript #asynchronous #async-await #es6-promise
Вопрос:
У меня есть асинхронная функция, которая должна возвращаться, когда возвращается обратный вызов внутренней асинхронной функции. Я не могу дождаться этой внутренней функции, потому что она не возвращает обещания. Я пытался указать await
при передаче обратного вызова, но это не помогает. Как таковой:
async getPublicKey(): Promise<string> {
const callback = async (err: any, key: any) => {
if (!err) this.publicKey = key.resu<
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. смотреть в
util.promisify
Ответ №1:
Вы захотите обернуть обратный вызов в a 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);
})
})
}