通过node.js中的回调函数传递变量

时间:2017-01-24 21:40:16

标签: javascript json node.js

昨天我发布了这个问题,但我想我只是把所有人搞糊涂了。我收到的回答是“你的问题究竟是什么?”所以我今天正在扩大和重新发布。

以下node.js代码段来自文件“accounts.js”,该文件位于路径/ lib中的ETrade api库中。它应该返回包含有关经过身份验证的用户的帐户的数据的json。身份验证部分工作得很好。我对这个函数最后一行的确切内容感到困惑:

this._run(actionDescriptor,{},successCallback,errorCallback);

十年前(我最后一次编码),我们没有“这个”的构造,我对“_run”没有任何线索,谷歌搜索没有帮助。这是功能。

exports.listAccounts = function(successCallback, errorCallback) {
  var actionDescriptor = {
    method: "GET",
    module: "accounts",
    action: "accountlist",
    useJSON: true,
  };

  this._run(actionDescriptor, {}, successCallback, errorCallback);
};

据我所知,该功能是通过“et.listAccounts ....”访问的,但后来我的理解变得很糟糕。显然正在执行get并返回json数据。很明显,结果会通过successCallback传回。

在我的app.js文件中,我有以下内容:

var etrade = require('./lib/etrade');
var et = new etrade(configuration);

有人可以建议在app.js中使用一个片段,将帐户数据输出到控制台吗?

似乎必须通过successCallback传回json数据,但我在app.js端如何访问它时迷失了方向。

假设在app.js中我想将帐户数据放在名为myAccounts的变量中。 exports.listAccounts函数没有指定返回值,所以我怀疑我可以做var myAccounts = et.listAccounts()。同样,如果我尝试这样做,myAccounts将是未定义的:et.listAccounts(){myAccounts,error}。最后,listAccounts函数包含两个可能使用的变量名称,“accounts”和“accountlist”,但这些变量在app.js中未定义。

当我在app.js中的successCallback中添加一个函数来向控制台写一个通用消息时,消息会显示在日志中,所以我知道我正在将它放入listAccounts函数并成功返回。在这种情况下,日志也会显示 “请求:[获取]:https://etwssandbox.etrade.com/accounts/sandbox/rest/accountlist.json

由此我推断出数据实际上已被返回并且在该终点可用。

1 个答案:

答案 0 :(得分:1)

  

十年前(我最后一次编码),我们没有“这个”的构造,我也没有关于“_run”的线索

this引用当前对象,进一步阅读here_run正是他们选择调用该函数的原因。

我没有这个模块的经验,但粗略地看了一眼git repo,我怀疑你会想要扩展你的app.js,如此:

et.listAccounts(function(response) {
  console.log(response);
});

在javascript函数中是第一个顺序,因此可以像变量see here一样传递。 listAccounts想要传递一个函数,当它完成后,它将使用一个参数调用它,如etrade.js中所示。

还有函数errorCallback,它大致相同,但在出错时调用。您可以像这样扩展上面的代码段:

et.listAccounts(function(response) {
  console.log(response);
}, function(error) {
  console.log(error);
});