serializr icon indicating copy to clipboard operation
serializr copied to clipboard

Make "deserialize" promisifiable

Open razetdinov opened this issue 7 years ago • 2 comments

deserialize uses node-style callbacks, but fails to follow the rule "callback is the last argument". This prevents making use of util.promisify, which

Takes a function following the common error-first callback style, i.e. taking a(err, value) => ... callback as the last argument, and returns a version that returns promises.

I suggest moving callback to the end of argument list. This would also be more convenient: now you have to pass null for the callback in cases when you don't need async deserialization, but have to pass custom args.

razetdinov avatar Feb 24 '18 04:02 razetdinov

You are correct, this is a change that needs to be made. Unfortunately, this would be a breaking change which would be tough to implement in version 1x of serializer.

I'm thinking version 2 should return a promise on serialization/deserialization instead of a callback. Thoughts?

alexggordon avatar Apr 20 '18 18:04 alexggordon

Hello @razetdinov and @alexggordon, I have created below code for my typescript project and using it successfully without any issues. Its a generic await-able method.

static async Deserialize<T>(modelSchema: ClazzOrModelSchema<T>, json: any): Promise<T> { return new Promise<T>((resolve, reject) => { deserialize<T>(modelSchema, json, (error: any, result: T) => { if (error) reject(error); else resolve(result); }); }); }

waliarubal avatar May 02 '19 07:05 waliarubal