在承诺中转换带有回调的函数 (Node.js) (OpenTok)
Convert a function with callback in a promise (Node.js) (OpenTok)
我的实际代码(有效!)
我创建了一个带有回调的函数来创建会话并为 OpenTok 生成令牌,将自身导出到应用程序。
函数
//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 to 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 to 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 with sessionId and token
module.exports.credentials = newSession;
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 that was export from "credentials" (the function)
function fun(obj) {
//Define app
var app = express();
//Use "public" static folder
app.use(express.static(__dirname + '/public'));
//Initialize the 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 is running in localhost:' + server_port);
});
}
}
我想要的:
我如何转换创建会话并生成令牌的函数,以供我在应用程序中使用?
更新 (08/01/2016) (14:53 VET)
我在我的应用程序中导出了功能模块如下:
// 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 the promise
console.log(credentialsPromise);
并在控制台中抛出:
Promise { <pending> }
我应该如何在我的应用程序中使用我的承诺?
最小的方法如下(见***
评论):
var newSession = function(){
// *** Return a 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` with the object when done
newTok(objSession, resolve);
}
});
});
};
请注意,我没有承诺 newTok
,尽管我们可以。不清楚为什么 newTok
在回调中没有任何内容是异步的并且它是私有函数时接受回调。
使用方式如下:
newSession(/*...parameters...*/).then(
function(result) {
// All is good, use result
},
function(err) {
// Error occurred, see `err`
}
);
我的实际代码(有效!)
我创建了一个带有回调的函数来创建会话并为 OpenTok 生成令牌,将自身导出到应用程序。
函数
//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 to 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 to 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 with sessionId and token
module.exports.credentials = newSession;
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 that was export from "credentials" (the function)
function fun(obj) {
//Define app
var app = express();
//Use "public" static folder
app.use(express.static(__dirname + '/public'));
//Initialize the 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 is running in localhost:' + server_port);
});
}
}
我想要的:
我如何转换创建会话并生成令牌的函数,以供我在应用程序中使用?
更新 (08/01/2016) (14:53 VET)
我在我的应用程序中导出了功能模块如下:
// 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 the promise
console.log(credentialsPromise);
并在控制台中抛出:
Promise { <pending> }
我应该如何在我的应用程序中使用我的承诺?
最小的方法如下(见***
评论):
var newSession = function(){
// *** Return a 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` with the object when done
newTok(objSession, resolve);
}
});
});
};
请注意,我没有承诺 newTok
,尽管我们可以。不清楚为什么 newTok
在回调中没有任何内容是异步的并且它是私有函数时接受回调。
使用方式如下:
newSession(/*...parameters...*/).then(
function(result) {
// All is good, use result
},
function(err) {
// Error occurred, see `err`
}
);