[英]Returning promise inside function giving typescript type error
我有一个场景,有一个 function 来检查是否需要 userWhiteListing。 如果没有,则调用 allowUserToLogin function。 如果是,则检查特定用户是否被列入白名单。 如果未列入白名单,则抛出错误,否则调用 allowUserToLogin function。
我正在寻找 promise 的更好方法,而不是异步等待。
这是相同的示例。
public function sample():Promise<{ session: string , url: string }> {
return this.userWhiteListingRqd().then((whiteListingRqd) => {
if(whiteListingRqd) {
return this.isUserWhiteListed().then((userWhiteListed) => {
if(!userWhiteListed) {
throw new Error("error");
}
// Here if user whitelisted then it will go to allowUserToLogin
// But here typescript throws error Promise<void> cannot be assignable
// to Promise<session: string , url:string>
});
}
});
return this.allowUserToLogin().then(() => {
return { session, url };
});
}
private function userWhiteListingRqd(): Promise<boolean> {
// returns boolean value
}
private isUserWhiteListed(): Promise<boolean> {
// returns boolean value
}
我还在学习阶段。 有没有更好的方法来使用 promise 来处理这种情况。
任何帮助将非常感激。
在许多情况下使用 async-await 可以清理承诺繁重的代码。
public async function sample(): Promise<{ session: string; url: string }> {
if (await this.userWhiteListingRqd() && !(await this.isUserWhiteListed()) {
throw new Error("The user must be whitelisted but is not.");
}
await this.allowUserToLogin();
return { session, url };
}
如果你不想使用 async/await,试试这个:
function sample(): Promise<{ session: string; url: string }> {
return this.userWhiteListingRqd()
.then((whiteListingRqd) =>
this.isUserWhitelisted().then(
(isUserWhitelisted) => isUserWhitelisted || !whiteListingRqd
)
)
.then((userIsAllowed) =>
userIsAllowed ? this.allowUserToLogin() : Promise.reject(new Error())
)
.then(() => ({ session, url }));
}
警告:像这样的 promise 链并不以可读性强而著称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.