为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2023-11-11 16:10:49
我将 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)    })  }
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

无需将 knex 查询包装到 Promise 构造函数。您可能正在尝试写这样的东西:


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

    return pg(cars).where({ 'id': id }).first()

        .then(result => {

          if (!result) {

            throw new ModelNotFoundError('LMAO user not found')); 

          }

          return result;

        });

     })

  }


查看完整回答
反对 回复 2023-11-11
?
阿晨1998

TA贡献2037条经验 获得超6个赞

不确定这是否是您所要求的,但您可以利用异步/等待。


const result = await new Promise(async (resolve, reject) => {

  try {

    await knex('cars').insert(cars);

    console.log("data inserted");

  } catch (err) {

    console.log(err);

    reject(err);

  } finally {

    knex.destroy();

  }

  resolve();

})

你不需要“等待”这个承诺,你也可以在那时“等待”它。我想要表达的要点是,您可以使 Promise 中的函数异步。


查看完整回答
反对 回复 2023-11-11
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信