diff --git a/packages/memcache-client/src/lib/client.ts b/packages/memcache-client/src/lib/client.ts index c18e91d..72309ba 100644 --- a/packages/memcache-client/src/lib/client.ts +++ b/packages/memcache-client/src/lib/client.ts @@ -29,7 +29,7 @@ type StoreParams = string | number | Buffer | Record; type CommonCommandOption = Readonly<{ noreply?: boolean; expectedResponses?: number }>; -type StoreCommandOptions = CommonCommandOption & { ignoreNotStored?: boolean } & Readonly<{ +type StoreCommandOptions = CommonCommandOption & { ignoreNotStored?: boolean; ignoreExists?: boolean } & Readonly<{ lifetime?: number; compress?: boolean; }>; @@ -332,6 +332,9 @@ export class MemcacheClient extends EventEmitter { callback?: OperationCallback ): Promise { assert(options?.casUniq, "Must provide options.casUniq for cas store command"); + if (options.ignoreExists === undefined) { + options = { ...options, ignoreExists: this.options.ignoreExists }; + } return this.store("cas", key, value, options, callback); } @@ -701,6 +704,9 @@ export class MemcacheClient extends EventEmitter { if (options.ignoreNotStored === true && err.message === "NOT_STORED") { return resolve("ignore NOT_STORED"); } + if (options.ignoreExists === true && err.message === "EXISTS") { + return resolve("ignore EXISTS"); + } return reject(err); } if (result) { diff --git a/packages/memcache-client/src/types.ts b/packages/memcache-client/src/types.ts index 1796155..ef253ff 100644 --- a/packages/memcache-client/src/types.ts +++ b/packages/memcache-client/src/types.ts @@ -43,6 +43,7 @@ export type PackedData = { export type MemcacheClientOptions = { server: ServerDefinition | SingleServerEntry | MultipleServerEntry; ignoreNotStored?: boolean; + ignoreExists?: boolean; lifetime?: number; noDelay?: boolean; cmdTimeout?: number;