How to use promise in constructor?

36 views
Skip to first unread message

Louis Sherren

unread,
Mar 8, 2015, 11:40:03 PM3/8/15
to nod...@googlegroups.com
I have to do some async call in some constructor, like retrieve data from mysql. 
I'm trying to use Promise to handle the 'async' thing but I find it impossible because:

I must return Promise object in constructor but the constructor is called by 'new' key word, there shouldn't be any 'return' in constructor.

Is there some way to do this piece of work?
Now I just add another function like 'init' to do the async part, can I do it in constructor ?

Aria Stewart

unread,
Mar 8, 2015, 11:50:37 PM3/8/15
to nod...@googlegroups.com
There's two things you can do: use a plain function and call your constructor internally:

function createThing(args) {
return doPrep.then(function (prepdata) { return new Thing(prepdata, args); })
}

Or do the prep work in the constructor, but have the object not fully ready to use -- which if you think of promises as future values and not flow control, makes perfect sense:

function Thing(args) {
this.prep = doPrep();
}

/* Later */
var thing = new Thing();
thing.prep.then(function (prepdata) { ... })

What is the actual task you're trying to accomplish?

Aria

Axel Kittenberger

unread,
Mar 9, 2015, 10:36:40 AM3/9/15
to nodejs
Just wrap it in a "factory". I usually call it whatever.create().

Then use with it whatever flow control thingy you prefer. callbacks, generator/suspend, etc.


--
Job board: http://jobs.nodejs.org/
New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups "nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+un...@googlegroups.com.
To post to this group, send email to nod...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/767C6524-80A3-40E3-86D2-21F870810C52%40dinhe.net.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages