Prisma多次操作导致的连接器超时问题解决 - 荆棘小栈
47
开发
2021-10-02 09:38:14

问题复现详见 Prisma#9465

首先我们有一个orders数组

const orders=[{id:2, order:5}, {id:3, order:4}]

我想做每次都按照id查询然后修改值的操作。由于是异步,很自然地想到了Promise.all

await Promise.all(
  orders.map(({ id, order }) => {
    return prisma.friend.update({
      where: { id },
      data: { order },
    });
  })
);

然后就抛Error了

Error: 
Invalid `prisma.friend.update()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: ConnectionError(Timed out during query execution.) })

于是我就想到了orders.forEach,但是forEach也是同步的

所以正解应该用for

for (const { id, order } of orders) {
  await prisma.friend.update({
    where: { id },
    data: { order },
  });
}
Prisma
报错
bug
异步
promise
编辑于: 2021-10-02 10:02:14
知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可

Prisma多次操作导致的连接器超时问题解决

47
开发
2021-10-02 09:38:14

问题复现详见 Prisma#9465

首先我们有一个orders数组

const orders=[{id:2, order:5}, {id:3, order:4}]

我想做每次都按照id查询然后修改值的操作。由于是异步,很自然地想到了Promise.all

await Promise.all(
  orders.map(({ id, order }) => {
    return prisma.friend.update({
      where: { id },
      data: { order },
    });
  })
);

然后就抛Error了

Error: 
Invalid `prisma.friend.update()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: ConnectionError(Timed out during query execution.) })

于是我就想到了orders.forEach,但是forEach也是同步的

所以正解应该用for

for (const { id, order } of orders) {
  await prisma.friend.update({
    where: { id },
    data: { order },
  });
}
Prisma
报错
bug
异步
promise
编辑于: 2021-10-02 10:02:14
知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可