大家好,我正在开发一个异步函数,我希望它返回我从其他一些 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
中的代码完成,apiAccessor.ts
中的 console.log 给了我正确的值想。然而,这似乎并没有按预期返回到 main.ts
。
如何返回值或让 main.ts
等待函数首先运行完成?
感谢您的阅读,如果有人能提供帮助,我们将不胜感激!
最佳答案
您的问题是 client.register 不返回 promise ,它需要一个在内部运行但不返回 promise 的回调函数。您需要创建一个 Promise 并在回调函数中解析它,然后等待 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);
}
关于javascript - 变量返回未定义,即使在 typescript 的异步函数中分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601634/