2017-11-29 8 views
0

이 패키지 https://github.com/OptimalBits/bull에 따르면 "대기 대기열"에서 특정 작업을 중단 할 수 있습니까? 사용 사례는 다음과 같습니다.불 대기열에서 특정 작업을 중단하는 방법은 무엇입니까?

나는 mongodb 컬렉션 "사용자"와 두 사용자의 이름과 아바타를 저장하는 "우정"컬렉션을 가지고 있습니다. 따라서 특정 사용자의 friendlist를 얻는 데 하나의 쿼리 만 있으면됩니다. 사용자가 아바타를 변경하면이 사용자의 모든 문서를 "우정"컬렉션으로 업데이트해야합니다. 이것은 백그라운드에서 수행하기를 원하기 때문에 중요하지 않은 작업이며 일관성은이 사용 사례에서는 중요하지 않습니다. 그러나 사용자가 아바타를 짧은 시간 내에 여러 번 업데이트 할 때 가장 최근의 것을 제외하고 모든 이전 작업 참조 (우정 수집 업데이트 용)를 취소하고 싶습니다. 이것은 황소와 가능한가?

미리 감사드립니다. 모든 정보를 제공해 주시면 감사하겠습니다.

답변

1

불 참조를 보면 Job.remove() 메서드가 있음을 알 수 있습니다. 어떤 코드도 게시하지 않았으므로 어떻게 생겼는지 추측 할 수 있습니다. 그러므로 나는 네가 할 수있는 것을 묘사했다.

그러나 Promise<Job>Queue.add()에 의해 반환되는 Map<string, Map<string, Promise<Job>>에 저장해야합니다. 문자열은 사용자의 _id이고 Promise<Job>[]은 특정 사용자에 대한 대기중인 작업을 모두 포함하는 배열입니다. 작업이 해결되면 (Job.finished()으로 해결 된 작업을 기다릴 수 있음) 맵에서 Promise를 제거해야합니다.

사용자가 자신의 아바타를 변경할 때마다 작업을 제거해야 할 경우지도를 조사 할 수 있습니다. 위에서 언급 한 맵의 값은 JobId별로 작업을 쉽게 제거 할 수있는 다른 맵 (키는 JobId을 나타내는 문자열)입니다. 다소 복잡해 보이지만 두려워하지 않아도됩니다.지도의 작동 원리를 이해하면 문제가되지 않습니다 .-).

+0

정말 고마워요! 이제 완벽하게 작동합니다. – BestPractice2Go