向 JSON RPC 回调函数添加参数

Posted

技术标签:

【中文标题】向 JSON RPC 回调函数添加参数【英文标题】:Adding arguments to JSON RPC callback function 【发布时间】:2014-04-01 22:18:10 【问题描述】:

注意:为清楚起见,问题已于 2014 年 4 月 5 日编辑

我正在使用从服务器请求数据的 JSON RPC 进行方法调用。当该数据返回时,它会触发一个回调函数。 JSON RPC 回调函数由服务器自动提供输出和异常参数。目前我有一个函数,它既可以发出 RPC 请求,又可以处理和显示数据。我想将我的请求问题与我的显示问题分开,以便代码更可重用。为此,我还需要将 resultRegion id 参数传递给回调函数。

这是一个当前功能但联合代码的示例:

function customerTable(inputField, resultRegion) 
  var displayAccountTable = function(accounts, exception) 
    if(exception) 
      alert(exception.msg);
    
    else 
      var headings = ["Account ID", "First Name", "Last Name", "Balance"];
      var rows = new Array();
      for(var i=0; i<accounts.length; i++) 
        var account = accounts[i];
        rows[i] = [account.accountID, account.firstName, account.lastName, account.prettyAccountBalance];
      
      var table = getTable(headings, rows);
      htmlInsert(resultRegion, table);
    
  ;
  var inputs = commaStringToArray(getRawValue(inputField));
  rpcClient.rpcTester.getAccounts(displayAccountTable, inputs);

编辑:这是我在使用 David SkyMesh 的答案后得到的工作代码。

function customerTable(inputField, resultRegion) 
  var inputs = commaStringToArray(getRawValue(inputField));
  rpcClient.rpcTester.getAccounts(displayAccountTable(resultRegion), inputs);


function displayAccountTable(resultRegion) 
  return function (accounts, exception) 
    if(exception)  return alert(exception.msg); 
    var headings = ["Account ID", "First Name", "Last Name", "Balance"];
    var account, rows = [];
    for(var i=0; i<accounts.length; i++) 
      account = accounts[i];
      rows[i] = [account.accountID, account.firstName, account.lastName, account.prettyAccountBalance];
    
    var table = getTable(headings, rows);
    htmlInsert(resultRegion, table);
  ;

【问题讨论】:

您的问题非常令人困惑。我的猜测是您想将显示逻辑与请求逻辑分开。我提供了一个非常简单的基于闭包的答案来分离关注点。你是这个意思吗?如果不是,您究竟要排除哪些变量/表达式? 是的,这正是我想做的。抱歉,这有点令人困惑。我会给你回答一个测试,看看它是否适合我。如果是这样,我会稍微修改一下问题,以便对未来的用户更有用。 【参考方案1】:

让我们从明显的基于闭包的方法开始:

function mk_displayAccountTable(inputField, resultRegion) 
  return function (accounts, exception) 
    if (exeption) return alert(exception.msg);
    var headings = ["Account ID", "First Name", "Last Name", "Balance"];
    var i, account, rows = [];
    for(i=0; i<accounts.length; i++) 
      account = accounts[i];
      rows.push([account.accountID, account.firstName, 
                account.lastName, account.prettyAccountBalance]);
    
    var table = getTable(headings, rows);
    htmlInsert(resultRegion, table);
  ;


function customerTable(inputField, resultRegion) 
  var inputs = commaStringToArray(getRawValue(inputField));
  rpcClient.rpcTester.getAccounts(
    mk_displayAccountTable(inputField, resultRegion), 
    inputs);

【讨论】:

这正是我想做的,谢谢。我对其进行了一些修改,并将我的最终代码发布为对上述问题的编辑。

以上是关于向 JSON RPC 回调函数添加参数的主要内容,如果未能解决你的问题,请参考以下文章

快速向类函数添加回调

xpages JSON-RPC 服务处理来自回调函数的响应

在 Express JS 和 NodeJS 中为 jsonp 回调函数添加参数

函数名作为参数传递与回调函数

Vue函数有回调参数,添加参数时如何保留默认回调参数

Vue函数有回调参数,添加参数时如何保留默认回调参数