[英]Variable return undefined even assigned in async function in typescript
大家好,我正在研究 Async Function,我希望它返回一個我從其他 API 調用中獲得的名稱。 我的代碼如下:
apiAccessor.ts
async registerName(): Promise<any>{
try{
await client.register((error, result) => {
if(error){
console.error(`Error register name: ${error}`);
}
else{
console.log('Registered Successfully!');
this.assignedPlace = result.assignedPlace;
console.log(this.assignedPlace);
}
});
return this.assignedPlace;
}
catch (error) {
this.logger.error(error.name, error.message);
}
main.ts
async function nameAssigner() {
let place = await client.registerName();
console.log(place);
}
nameAssigner();
問題是, main.ts
中的 console.log 將始終首先運行(即使我將 console.log 放入then
promise 回調)並給我undefined
的值,而一段時間后apiAccessor.ts
中的代碼已經完成,控制台.log in apiAccessor.ts
給了我想要的正確值。 然而,這似乎並沒有像預期的那樣返回到main.ts
如何返回值或讓main.ts
等待 function 先運行完成?
感謝您的閱讀,如果有人可以提供幫助,我們將不勝感激!
您的問題是 client.register 不返回 promise,它需要一個在內部運行但不返回 promise 的回調 function。 您需要創建一個 promise 並在您的回調 function 中解決它,然后等待 promise 的結果。
async registerName(): Promise<any>{
try{
let promise = new Promise(function(resolve, reject) {
client.register((error, result) => {
if(error){
reject(`Error register name: ${error}`);
}
else{
console.log('Registered Successfully!');
resolve(result.assignedPlace);
console.log(this.assignedPlace);
}
});
});
this.assignedPlace = await promise;
return this.assignedPlace;
}
catch (error) {
this.logger.error(error.name, error.message);
}
從您的代碼來看,它看起來像client.register((error, result) => {
使用回調並且沒有返回 Promise。因此,您在它前面的await
並沒有按照您的想法進行。您可以將調用包裝到client.resolve
使用Promise
並僅在回調為您提供結果后解決/拒絕它。
return new Promise((resolve,reject) => {
try {
client.register((error, result) => {
if(error){
console.error(`Error register name: ${error}`);
return reject(error);
}
else{
console.log('Registered Successfully!');
return resolve(result.assignedPlace);
}
});
}
catch (error) {
this.logger.error(error.name, error.message);
return reject(error);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.