承诺未解决,但在promise回调内部达到了resolve()

我正在尝试编写与Laravel中的查询构建器类似的查询构建器,但是对于TypeScript,但是遇到了Promise解决问题。

在下面的代码中,我减少了构建器和控制器类。使用该库https://github.com/mysqljs/mysql,我使用代码connection.query(...)运行查询,该查询传递给回调函数,该函数处理响应并相应地解析/拒绝。我不明白的是,它到达了console.log并将其输出到我的控制台中,但是未调用控制器中的.then()

import * as mysql from 'mysql';

interface InternalQueryReturnType<T> {
  results: T;
  fields?: mysql.FieldInfo[];
}

// Cut down version of my builder.
export class MySQLBuilder implements IQueryBuilder {
  protected query<T>(query: string): Promise<InternalQueryReturnType<T>> {
    return new Promise((resolve,reject) => {
      const connection = mysql.createConnection({
        host: 'localhost',user: 'root',password: '',database: 'dbname',port: 999,});

      connection.connect({},(error) => {
        reject(error);
      });

      connection.query(query,(error,results,fields) => {
        if (error) {
          reject(error);
          return;
        }

        // It is reaching this point.
        console.log({ results }); // <- This is returning the correct results.
        resolve({ results,fields });
      });

      connection.end();
    });
  }
}

// My controller.
export class PostController {
  public static index(request: IRequest): Promise<IResponse> {
    return new Promise((resolve,reject) => {
      return new Promise((resolve) => {
        // Testing the raw query which the builder created.
        new MySQLBuilder().query<any>('SELECT * FROM `users` WHERE `id` = 1 LIMIT 1 OFFSET 0')
          .then(({ results }) => {
            // Nothing was passed into this.
            console.log({ results });
            resolve(new JsonResponse(results || {}));
          })
          .catch((error) => {
            resolve(new JsonResponse(error).status(400));
          });

        // Builder code.
        // new MySQLBuilder().table('users')
        //   .where('id','=',1)
        //   .first()
        //   .then((value: object | null) => {
        //     console.log(value);
        //     resolve(new JsonResponse(value || {}));
        //   })
        //   .catch((error) => {
        //     console.error({ error });
        //     resolve(new JsonResponse(error).status(400));
        //   });
      });
    });
  }
}

有人有诺言经历过这个问题吗?

如果您需要整个代码库,我可以稍后再进行整理,但这应该是足够的代码。

这个问题的解决方案实际上是这样的:

connection.connect({},(error) => {
  if (error) {
    reject(error);
  }
});
CYF147896325 回答:承诺未解决,但在promise回调内部达到了resolve()

这个问题的解决方案实际上是这样的:

connection.connect({},(error) => {
  if (error) {
    reject(error);
  }
});

我没有检查错误是否为NULL。

本文链接:https://www.f2er.com/3010634.html

大家都在问