From 0cca9a73a17aa6c8f5e7a4fc0169789d13981529 Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Fri, 28 Oct 2022 09:28:16 +1100 Subject: [PATCH] fix: `queryOrderedCallback` not stopping when callback returns true Fixes #978. --- CHANGELOG.md | 1 + src/lib/waku_store/index.node.spec.ts | 37 +++++++++++++++++++++++++++ src/lib/waku_store/index.ts | 8 +++--- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e8d64d829..2a90753ebe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Incorrect cursor encoding in Store queries. +- `WakuStore.queryOrderedCallback` not stopping when callback returns true. ### Removed diff --git a/src/lib/waku_store/index.node.spec.ts b/src/lib/waku_store/index.node.spec.ts index ecbec36309..aa841db6e6 100644 --- a/src/lib/waku_store/index.node.spec.ts +++ b/src/lib/waku_store/index.node.spec.ts @@ -465,6 +465,43 @@ describe("Waku Store", () => { expect(bothMessages?.length).eq(2); }); + + it("Ordered callback, aborts when callback returns true", async function () { + this.timeout(15_000); + + const totalMsgs = 20; + + for (let i = 0; i < totalMsgs; i++) { + expect( + await nwaku.sendMessage( + Nwaku.toMessageRpcQuery({ + payload: utf8ToBytes(`Message ${i}`), + contentTopic: TestContentTopic, + }) + ) + ).to.be.true; + } + + waku = await createFullNode({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + await waku.dial(await nwaku.getMultiaddrWithId()); + await waitForRemotePeer(waku, [Protocols.Store]); + + const desiredMsgs = 14; + const messages: Message[] = []; + await waku.store.queryOrderedCallback( + [TestDecoder], + async (msg) => { + messages.push(msg); + return messages.length >= desiredMsgs; + }, + { pageSize: 7 } + ); + + expect(messages?.length).eq(desiredMsgs); + }); }); describe("Waku Store, custom pubsub topic", () => { diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 4c5899e8fb..42f3594b54 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -112,7 +112,7 @@ export class WakuStore { callback: (message: T) => Promise | boolean | void, options?: QueryOptions ): Promise { - const abort = false; + let abort = false; for await (const promises of this.queryGenerator(decoders, options)) { if (abort) break; const messagesOrUndef: Array = await Promise.all(promises); @@ -129,9 +129,9 @@ export class WakuStore { } await Promise.all( - messages.map((msg) => { - if (!abort) { - if (msg) return callback(msg); + messages.map(async (msg) => { + if (msg && !abort) { + abort = Boolean(await callback(msg)); } }) );