Возврат результатов из функции JavaScript
Я довольно плохо знаком с JavaScript и надеюсь, что кто-нибудь поможет мне понять, как изменить приведенную ниже функцию, чтобы она правильно возвращала результат при вызове. В настоящее время код работает, и функция handleResults вызывается после генерации строки сеанса. То, что я хотел бы сделать, это изменить функцию generateSessionString, чтобы она возвращала строку сеанса, а не передавала ее в handleResults. Кто-нибудь может дать мне советы о том, как я могу это сделать?
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;
}
2 ответа
Если вам нравится писать это синхронизированным способом (это все еще асинхронный код), вы можете попробовать обещать (в этом примере я использовал jQuery)
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);
}
)
@ Итай Кинрот ответ правильный. На самом деле, включение / запуск jQuery - это еще один способ решить эту проблему, но $.Deferred лучше.
если вы хотите узнать больше об этом, вы можете попытаться понять Pub/Sub Pattern. Эта статья рекомендуется:
http://www.elijahmanor.com/2013/03/angry-birds-of-javascript-blue-bird.html