i'm struggling wrap head around nested promise layout 1 one object returned @ end of it. current code follows:
router
router.get(`/${config.version}/event/:id?`, function (req, res, next) { var event = new event(req, res, next); event.getinfo(req.params.id).then((info) => { res.send(info); }); });
function
getinfo(id) { db.main('events').where('id', id).select() .then((result) => { if(result.length > 0) { var event = result[0]; //regular functions event.status = this.getstatus(id); event.content = this.getcontent(id); event.price = this.getprice(id); //promise functions var users = this.getusers(id); var hosts = this.gethosts(id); promise.all([users, hosts]).then(values => { event.users = values[0]; event.hosts = values[1]; //return whole event object router return event; }) .catch((err) => { return { result: 'error', error: err }; }); } else { return { result: 'error', error: "event not exist" }; } }).catch((e) => { return { result: 'error', error: "could not retrieve event info" }; }); }
as can see, router initiates call info event. function database call , gets event data. thereafter need users , hosts of event different table, append info event object , return whole object router sent client.
when error because i'm not returning promise getinfo function, i'm not sure how or promise i'm supposed return.
i'd appreciate this. thanks
using .then
means returning promise.
function getinfo(id) { return new promise(function(resolve, reject) { resolve('yay!'); }) } getinfo().then(function(result) { //result = yay! });
to make code work, replace returns resolves, errors rejects, , wrap whole thing return new promise
did.
getinfo(id) { return new promise(function(resolve, reject) { db.main('events').where('id', id).select() .then((result) => { if (result.length > 0) { var event = result[0]; //regular functions event.status = this.getstatus(id); event.content = this.getcontent(id); event.price = this.getprice(id); //promise functions var users = this.getusers(id); var hosts = this.gethosts(id); promise.all([users, hosts]).then(values => { event.users = values[0]; event.hosts = values[1]; //return whole event object router resolve(event); }) .catch((err) => { reject({ result: 'error', error: err }); }); } else { reject({ result: 'error', error: "event not exist" }); } }).catch((e) => { reject({ result: 'error', error: "could not retrieve event info" }); }); }); }
Comments
Post a Comment