异步函数类型Promise <faceproductlist [] | =“” string =“”>的问题

时间:2019-05-13 16:03:37

标签: reactjs typescript

为什么使用Promise类型时会出现错误。异步功能。 呃 函数缺少结尾的return语句,并且返回类型不包含'undefined'。

import { faceProductList } from "../../Type/Interface";

class Server {
  private url: string = "https://...../";

  public async request(id: string): Promise<object | string> {
    try {
      const res = await fetch(`${this.url}${id}`);
      if (!res.ok) {
        throw Error("Page Not Found 404");
      }
      const resArr: object = await res.json();
      return resArr;
    } catch (error) {
      return error.message;
    }
  }

  public async handler(
    pathname: string,
    valueSearch: string
  ): Promise<faceProductList[] | string> {
    try {
      const prodObj = await this.request(pathname);
      if (typeof prodObj === "string") {
        throw Error(prodObj);
      } else if (valueSearch) {
        return Object.values(prodObj)
          .flat()
          .filter(({ title }) => title.includes(valueSearch));
      }
    } catch (error) {
      return error;
    }
  }
}

1 个答案:

答案 0 :(得分:1)

如果prodObj不是string类型,并且valueSearch是虚假的(例如,空字符串)-函数隐式返回undefined。在这种情况下,您应该决定要做什么(返回)。

if (typeof prodObj === "string") {
    throw Error(prodObj);
} else if (valueSearch) {
    return Object.values(prodObj)
        .flat()
        .filter(({ title }) => title.includes(valueSearch));
}
// undefined returned here implicitly
  

没有return语句的函数将返回默认值。对于使用new关键字调用的构造函数,默认值为其this参数的值。对于所有其他功能,默认返回值为undefined