TypeScript中async/await调用为null



登录功能

async login(loginInput: LoginInput): Promise<Login | null> {
if (!loginInput || !loginInput.email || !loginInput.password) return null;
try {
const user = await this.userService.validateUser({
email: loginInput.email,
password: loginInput.password,
});
var login: Login = new Login();
login.accessToken = user.id; //test
login.refreshToken = user.email; //test
return login;
} catch (err) {
return null;
}
}

获取功能

async validateUser(
input: ValidateUserInput,
): Promise<ValidateUserModel | null> {
const query: string = `query validateUser { validateUser(email: "E1", password: "P1"), {id, email} }`; //test
var user = await this.fetchData(this.url, query);
return Promise.resolve(new ValidateUserModel(user.id, user.email));
}
async fetchData(url: string, query: string): Promise<any> {
const res = fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: query }),
}).then((res) => res.json());
}
查询

@Query(() => Login, {nullable: true})
async login(@Args('login') loginInput: LoginInput) {
return await this.loginService.login(loginInput);
}

误差

{
"data": {
"login": null
}
}

我得到null结果,即使登录数据是正确的,我认为这是由于async/await不正确的使用。但我不知道我做错了什么:(

你能帮我改正我的代码吗?

我已经像这样改进了我的代码。仍然不确定这是最好的方法,但它是有效的

async login(loginInput: LoginInput): Promise<Login | null> {
if (!loginInput || !loginInput.email || !loginInput.password)
throw new ForbiddenException();
const user = await this.userService.validateUser({
email: loginInput.email,
password: loginInput.password,
});
if (!user) {
throw new ForbiddenException();
} else {
var login: Login = new Login();
login.accessToken = user.id; //test
login.refreshToken = user.email; //test
return login;
}
}

async validateUser(input: ValidateUserInput): Promise<ValidateUserModel | null> {
const query: string = `query validateUser { validateUser(email: "${input.email}", password: "${input.password}"), {id, email} }`; //test
var user = await this.fetchData(this.url, query);
if(user && user.validateUser) {
const userData = user.validateUser;
return new ValidateUserModel(userData.id, userData.email)
}
else return null;
}
async fetchData(url: string, query: string): Promise<any> {
return fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: query }),
})
.then((res) => res.json())
.then((res) => res.data);
}

@Query(() => Login, {nullable: true})
async login(@Args('login') loginInput: LoginInput) {
return await this.loginService.login(loginInput);
}

也许有人会需要它…

最新更新