创建新的 Promise 而不是使用 then() JS

我将 Nexus 用于数据库目的,但我有一个通常也适用于 JS/TS 的问题。


knex('cars').insert(cars).then(() => console.log("data inserted"))

    .catch((err) => { console.log(err); throw err })

    .finally(() => {

        knex.destroy();

    });

如何将上述内容创建为新的 Promise 并拒绝或解决,如下所示


byID(id: string): Promise<TEntity> {

    return new Promise((resolve, reject) => {

      const result = pg(cars)

      .where({ 'id': id })

      //   .andWhere('age', '<', 18);

        .first();

        if (!result)

            return reject(new ModelNotFoundError('LMAO user not found')); 

        resolve(result)

    })

  }


白衣染霜花
浏览 84回答 2
2回答

ABOUTYOU

无需将 knex 查询包装到 Promise 构造函数。您可能正在尝试写这样的东西:byID(id: string): Promise<TEntity> {&nbsp; &nbsp; return pg(cars).where({ 'id': id }).first()&nbsp; &nbsp; &nbsp; &nbsp; .then(result => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!result) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new ModelNotFoundError('LMAO user not found'));&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return result;&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp;})&nbsp; }

阿晨1998

不确定这是否是您所要求的,但您可以利用异步/等待。const result = await new Promise(async (resolve, reject) => {&nbsp; try {&nbsp; &nbsp; await knex('cars').insert(cars);&nbsp; &nbsp; console.log("data inserted");&nbsp; } catch (err) {&nbsp; &nbsp; console.log(err);&nbsp; &nbsp; reject(err);&nbsp; } finally {&nbsp; &nbsp; knex.destroy();&nbsp; }&nbsp; resolve();})你不需要“等待”这个承诺,你也可以在那时“等待”它。我想要表达的要点是,您可以使 Promise 中的函数异步。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript