从JavaScript函数返回结果
我对JavaScript相当陌生,希望有人能帮助我理解如何修改下面的函数,以便在调用时正确返回结果。代码当前有效,一旦生成会话字符串,就会调用handleResults函数。我想做的是修改generateSessionString函数,使其返回会话字符串,而不是将其传递给HandlerResults。有谁能给我一些建议,告诉我如何才能做到这一点从JavaScript函数返回结果,javascript,function,kaltura,Javascript,Function,Kaltura,我对JavaScript相当陌生,希望有人能帮助我理解如何修改下面的函数,以便在调用时正确返回结果。代码当前有效,一旦生成会话字符串,就会调用handleResults函数。我想做的是修改generateSessionString函数,使其返回会话字符串,而不是将其传递给HandlerResults。有谁能给我一些建议,告诉我如何才能做到这一点 function generateSessionString(){ var cb = function (success, results){
function generateSessionString(){
var cb = function (success, results){
if(!success)
alert(results);
if(results.code && results.message){
alert (results.message);
return;
}
handleResults(results);
};
var config = new KalturaConfiguration(gPartnerID);
config.serviceUrl = gServiceURL;
var client = new KalturaClient(config);
var partnerId = gPartnerID;
var userId = gUserName;
var password = gPassWord;
var expiry = gExpiry;
var privileges = gPrivileges;
var result = client.user.login(cb, partnerId, userId, password, expiry, privileges);
return result;
}
function handleResults(ks){
KalturaSessionString = ks;
}
如果您喜欢以同步方式编写它(它仍然是异步代码),您可以尝试promise(在本例中,我使用了jQuery)
@Itay Kinnrot的答案是正确的。事实上,jQuery的on/trigger是解决这个问题的另一种方法,但是$.Deferred更好 如果您想了解更多信息,可以尝试了解发布/订阅模式。 本文建议:
假设这是一个异步操作,则不能。
function generateSessionString(){
var dfd = new jQuery.Deferred();
var cb = function (success, results){
if(!success)
dfd.fail(results);
if(results.code && results.message){
dfd.fail (results.message);
return;
}
dfd.resolve(results);
};
var config = new KalturaConfiguration(gPartnerID);
config.serviceUrl = gServiceURL;
var client = new KalturaClient(config);
var partnerId = gPartnerID;
var userId = gUserName;
var password = gPassWord;
var expiry = gExpiry;
var privileges = gPrivileges;
client.user.login(cb, partnerId, userId, password, expiry, privileges);
return dfd.promise();
}
$.when(generateSessionString()).then(
function(session)
{
alert(session);
}
)