没有兑现的承诺

时间:2019-09-14 20:02:50

标签: javascript node.js prisma

我正在执行一些Prisma请求,并且发现某些Promise不能正常工作。

我知道我可以使用async-await,但这应该可以工作。

prisma
  .user({ uid })
  .then(user => {
    if (Object.keys(user).length) throw 'error!'

    return prisma.updateUser({
      data: { money: user.money - 50 },
      where: { id: user.id }
    })
  })
  .then(user => {
    prisma
      .createLog({
        user: { connect: { id: user.id } },
        type: 'TICKET_BOUGHT',
        date: new Date()
      })
      .then(() => console.log('Ticket bought'))
  })
  .catch(error => console.error(error))

如果该用户不存在,则应该抛出一个错误,而是运行第二个“ then”。

2 个答案:

答案 0 :(得分:1)

尝试一下:

 if (!Object.keys(user).length) throw 'error!'

答案 1 :(得分:0)

if (Object.keys(user).length) throw 'error!'表示用户是否存在,因为object.keys函数将返回对象键.length的数组列表,检查数组长度,

那么如果用户存在? Object.keys将返回用户属性的数组列表,这意味着长度将大于零,并且如果条件为true则将运行throw,

如果用户不存在,Object.keys将返回零,而if(0)等于false,因此不会运行

在您的情况下,您应该检查if( ! Object.keys(user).length )if( Object.keys(user).length === 0 ),或者可以检查if( !user || user == {} )if( !user || !user.uid)而不是uid,可以将其更改为任何必需的属性,并且可以确定在所有情况下,此属性都会返回100%