페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트

WBOY
풀어 주다: 2024-02-14 10:42:08
앞으로
984명이 탐색했습니다.

페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트

데이터베이스 쿼리를 수행할 때 페이징 쿼리를 자주 접하게 됩니다. 그러나 페이지를 매긴 쿼리가 취소되면 타이밍이 부정확해지는 경우가 있습니다. 이 문제는 정확한 타이밍이 필요한 애플리케이션에 매우 중요합니다. 이 기사에서는 PHP 편집자 Baicao가 타이밍의 정확성과 정확성을 보장하기 위해 이 문제를 처리하는 방법을 소개합니다. 이 문제를 더 잘 이해하고 처리하는 데 도움이 되는 몇 가지 가능한 원인과 해결 방법을 살펴보겠습니다.

질문 내용

쿼리를 비동기적으로 실행할 수 있는 페이지가 매겨진 SQL 쿼리를 수행하기 위한 개체가 있습니다.

으아아아

이 코드, 특히 취소 부분을 테스트하려고 합니다. 내 테스트 코드는 다음과 같습니다:

으아아아

내가 겪고 있는 문제는 cancel()이 호출될 때 switch 문 - ctx.done 또는 . 결과를 <code>results 채널로 보낼 때까지 루프 내 어디에서나 실행이 발생할 수 있습니다. 하지만 cancel() 을 호출할 때까지는 results 채널에서 데이터를 수신할 때까지 실행이 차단되어야 하기 때문에 이는 말이 되지 않습니다. 또한 저는 SQL 테스트를 위해 SQL 쿼리에 대한 어떤 종류의 퍼징도 허용하지 않는 sqlmock 패키지를 사용합니다. 이 결함이 발생하는 이유는 무엇이며 어떻게 해결합니까? cancel() 时,不能保证在我检查 switch 语句处执行 - ctx.done 或 。执行可以在循环中的任何位置进行,直到我将结果发送到 <code>results 通道。但这没有意义,因为执行应该阻塞,直到我从 results 通道接收到数据,直到我调用 cancel() 后我才会这样做。此外,我依靠 sqlmock 包进行 sql 测试,它不允许对 sql 查询进行任何类型的模糊检查。为什么我会遇到此故障以及如何修复它?

解决方法

我的问题是由于我自己对 go 通道缺乏了解而导致的。我认为,通过创建 chan([]*t, 1) 意味着通道在满时(即当它包含单个项目时)会阻塞,但事实并非如此。相反,当我尝试在缓冲区已满时发送到通道时,会发生阻塞。因此,通过像这样修改 results

Solution

내 문제는 내 바둑 채널에 대한 이해 부족으로 인해 발생했습니다. 나는 chan([]*t, 1) 을 생성함으로써 채널이 꽉 찼을 때(즉, 단일 항목을 포함할 때) 차단된다는 것을 의미한다고 생각했지만, 그렇지 않습니다. 대신 버퍼가 꽉 찼을 때 해당 채널로 전송하려고 하면 차단이 발생합니다. 따라서 결과를 다음과 같이 수정하면 됩니다: 🎜 으아아아 🎜포함된 데이터가 수신될 때까지 채널이 차단되는지 확인할 수 있습니다. 이 변경으로 인해 테스트와 관련된 모든 문제가 해결되었습니다. 🎜

위 내용은 페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿