提问者:小点点

Typescript不能返回,无论什么都不能返回,甚至不使用回调


我做什么都回不来。这是我的函数(nestjs)

async registerUser(body: UserInterface): Promise<string>

我什么都试过了,都没用。我读到过回调可能会有帮助,但是即使使用回调我也无法返回。

        await this.startRegistration(userBuilder, (result) => {
            console.log(result);
            return result;
        });

控制台日志正常工作,但函数不返回。当我尝试将结果赋值时,

        let testResult: any; 

        await this.startRegistration(userBuilder, (result) => {
            console.log(result);
            testResult = result;
            return result;
        });
        return testResult;

它只是返回未定义的。。。

我的开始注册功能:

async startRegistration(userBuilder: UserInterface, callback: (result: string) => void)

我尝试用这种方式调用回调:

callback(JSON.stringify({error: "SUCCESS", errorCode: 10}));

共2个答案

匿名用户

await this.startRegistration(userBuilder, (result) => {
  console.log(result);
  return result;
});

等待只对承诺有效。看起来startRegistration没有使用承诺,所以您必须将其封装在一个中。

const promise = new Promise<string>((resolve, reject) => {
  this.startRegistration(userBuilder, (result) => {
    console.log(result);
    resolve(result);
  });
})

const testResult = await promise;

或更短:

const testResult = await new Promise<string>((resolve) => {
  this.startRegistration(userBuilder, resolve);
});

匿名用户

 let testResult: any; 

        testResult = this.startRegistration(userBuilder, (result) => {
            console.log(result);
            return result;
        });
        return testResult;

和startRegistration()

startRegistration(userBuilder: UserInterface, callback: (result: string) => string) {
    //operations
    return callback()
}

在返回承诺之前,不需要使用async。我猜这会让你开始。

如果你要兑现承诺,

async函数中设置await是必要的

async someFunction() {
   let testResult: any; 

        testResult = await this.startRegistration(userBuilder, (result) => {
            console.log(result);
            return result;
        });
        return testResult;
}