2013-02-17 146 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); 
       } 
     )