Возврат результатов из функции 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

Другие вопросы по тегам