javascript - Convert a function with callback in a promise (Node.js) (OpenTok) -


this question has answer here:

my actual code (that works!)

i've created function callback create sessions , generate tokens opentok, exports application.

the function

//dependencies  var opentok = require('./ot').opentok;  var apikey = require('./ot').apikey;  var apisecret = require('./ot').apisecret;    //define variables  var sessionid;  var token;    //define create newsession function  var newsession = function(callbacks){    //create session (that allows opentok)    opentok.createsession({mediamode:"relayed"}, function(err, session){      if(err) throw err;      else {        //define session object        var objsession = {};        //obtain sessionid        objsession.sessionid = session.sessionid;        //call generate token function        newtok(objsession,callbacks);      }    });  }    //define generate token function  var newtok = function(obj, fn){      //generate token (that allows opentok)      token = opentok.generatetoken(obj.sessionid);      //store object (obj.tokenid) in token variable      obj.tokenid = token;      //define "obj" in function context      fn(obj);  }      //export new session sessionid , token  module.exports.credentials = newsession;

the app

// dependencies  var express = require('express');  var server_port = process.env.port || 3000;  var apikey = require('./ot').apikey; //obtain default apikey  var credentials = require('./credentials').credentials(fun);      //function export "credentials" (the function)  function fun(obj) {    //define app  var app = express();    //use "public" static folder  app.use(express.static(__dirname + '/public'));    //initialize app  init();    //routing  app.get('/', function(req, res) {    //rendering variables in views    res.render('index.ejs', {      apikey: apikey,      sessionid: obj.sessionid,      token: obj.tokenid    });  });    //define init  function init() {    app.listen(server_port, function() {      console.log('the app running in localhost:' + server_port);    });  }    }

that want:

how convert function creates sessions , generates tokens in promise can use app?

update (08/01/2016) (14:53 vet)

i've exported function module in app follow:

// dependencies  var express = require('express');  var server_port = process.env.port || 3000;  var apikey = require('./ot').apikey; //obtain default apikey    var credentialspromise = require('./credentialspromise').credentialspromise(); //obtain promise    console.log(credentialspromise);

and throw in console:

promise { <pending> } 

how should use promise in app?

the minimal approach follows (see *** comments):

var newsession = function(){   // *** return promise   return new promsie(function(resolve, reject) {     opentok.createsession({mediamode:"relayed"}, function(err, session){       // *** reject on error       if (err) {           reject(err);       } else {         var objsession = {};         objsession.sessionid = session.sessionid;         // *** have newtok call `resolve` object when done         newtok(objsession, resolve);       }     });   }); }; 

note didn't promise-ify newtok, though could. it's not clear why newtok accepts callback when nothing in asynchronous , it's private function.

using looks this:

newsession(/*...parameters...*/).then(     function(result) {         // good, use result     },     function(err) {         // error occurred, see `err`     } ); 

Comments