Как вернуть ошибку числа ИЛИ, если она есть, в асинхронной функции? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить результат от асинхронной функции, но эта асинхронная функция может возвращать в обещании либо число, либо ошибку (если ее выдает наш код).

Я пытался выбросить исключение из блока catch. Но я получаю сообщение об ошибке TSLint, которое ожидалось в выражении.

private async insertAppOrg(orgId): Promise<number> {
    try {
       return this.dbInstance.AppOrg.find({where: {orgId: orgId}})
            .then(async (appOrgData) => {
                if (appOrgData) {
                    return appOrgData.appOrgId;
                } else {
                    return (await this.createAppOrg(orgId)); //return number 
                }
        });
    } catch (ex) {
        return throw new ErrorFactory.DatabaseError(ex);
    }
}

Эта функция должна возвращать orgId (число) в случае успеха, иначе она должна выдавать исключение из блока catch.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

return throw является синтаксической ошибкой, поскольку throw является оператором, а не выражением.

Другая проблема заключается в том, что ошибка из возвращенного обещания не будет обработана с try..catch в async..await,должно быть:

 return await this.dbInstance.AppOrg.find(...).then(...)

Нет необходимости использовать then в async функции, потому что await является синтаксическим сахаром для then:

private async insertAppOrg(orgId): Promise<number> {
    try {
       const appOrgData = await this.dbInstance.AppOrg.find({where: {orgId: orgId}});
        if (appOrgData) {
            return appOrgData.appOrgId;
        } else {
            return (await this.createAppOrg(orgId));
        }
    } catch (ex) {
        throw new ErrorFactory.DatabaseError(ex);
    }
}
0 голосов
/ 09 апреля 2019

Вам необходимо вернуть обещание и удалить блок try-catch.


private async insertAppOrg(orgId: number): Promise<number> {
  return this.dbInstance.AppOrg.find({ where: { orgId: orgId } })
      .then(async (appOrgData: any) => {
        if (appOrgData) {
          return appOrgData.appOrgId;
        } else {
          return (await this.createAppOrg(orgId));
        }
      })
      .catch((e: any) => {
        throw new Error("This is an error")
      });
}

...