javascript - Returning one object that's built with nested promises -


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