繁体   English   中英

在 function 中返回 promise 给出 typescript 类型错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM