向 JSON RPC 回调函数添加参数

Adding arguments to JSON RPC callback function

本文关键字:添加 参数 函数 回调 JSON RPC      更新时间:2023-09-26

注意:为清楚起见,问题已编辑 4/5/2014

我正在使用从服务器请求数据的 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);
  };
}

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

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);
}