javascript - 变量返回未定义,即使在 typescript 的异步函数中分配

标签 javascript typescript asynchronous

大家好,我正在开发一个异步函数,我希望它返回我从其他一些 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/

相关文章:

javascript - 仅将第二个参数绑定(bind)到 javascript 函数

javascript - 为什么 node.js 进程占用的内存比分配的多

javascript - .npmignore 不忽略文件

javascript - ionic 2 : hide and display div with ngClass

javascript - 异步使用 IndexedDB

c# - 如何在 C# 中创建用于测试目的的模拟任务对象?

javascript - 如何在应用程序后台每 X 秒记录一次控制台日志?

generics - 从 TypeScript 中的泛型类型获取构造函数/实例

javascript - 如何使用 Angular 在我的组件中使用 datePipe?

typescript - 使用方法将来自后端的 JSON 对象键入为正确的 typescript 类