2013-02-17 84 views
0

我对JavaScript相当陌生,希望有人能帮助我理解如何修改以下函数,以便在调用时正确返回结果。代码当前有效,并且会话字符串生成后调用handleResults函数。我想要做的就是修改generateSessionString函数,以便它返回会话字符串而不是将它传递给handleResults。任何人都可以给我建议,我如何能做到这一点?从JavaScript函数返回结果

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

假设这是一个异步操作,你不能。 – Pointy 2013-02-17 16:45:40

回答

1

,如果你喜欢把它写在同步方式(它仍然是异步代码)可以尝试的承诺(在这个例子中我使用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); 
       } 
     )