【问题标题】:Returning results from a JavaScript function从 JavaScript 函数返回结果
【发布时间】:2013-02-17 16:43:11
【问题描述】:

我对 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;
}

【问题讨论】:

  • 假设这是一个异步操作,你不能。

标签: javascript function kaltura


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    @Itay Kinnrot 的回答是对的。其实jQuery 的on/trigger 是另一种解决方法,但是$.Deferred 更好。

    如果您想进一步了解它,可以尝试了解 Pub/Sub 模式。 推荐这篇文章:

    http://www.elijahmanor.com/2013/03/angry-birds-of-javascript-blue-bird.html

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多