我正在使用npm plaid,我希望能够访问此variable trans
之外的plaidClient.getTransactions
。感谢
var trans;
var startDate = moment().subtract(30, 'days').format('YYYY-MM-DD');
var endDate = moment().format('YYYY-MM-DD');
plaidClient.getTransactions(AccessToken, startDate, endDate, {
count: 250,
offset: 0,
}, function(error, transactionsResponse) {
if (error != null) {
console.log(JSON.stringify(error));
return response.json({
error: error
});
}
var trans = transactionsResponse
});
var trans //should work here
答案 0 :(得分:0)
您对异步Javascript的工作方式存在根本性的误解。
我建议您阅读Javascript中执行异步流程的许多教程之一,以了解为什么这个问题是错误的。
快速谷歌搜索建议了很多关于这个主题的文章。
前https://www.pluralsight.com/guides/front-end-javascript/introduction-to-asynchronous-javascript
答案 1 :(得分:0)
您无法使用异步代码执行此操作,更不用说同步代码了。您将永远无法访问在其定义的函数范围之外的变量trans
。
如果您想要访问trans
代表函数trans
的外所代表的值,则需要某种事件或流媒体。
尝试RxJS。
使用RxJS,您可以执行以下操作(未测试):
var trans = Rx.Subject();
var startDate = moment().subtract(30, 'days').format('YYYY-MM-DD');
var endDate = moment().format('YYYY-MM-DD');
plaidClient.getTransactions(AccessToken, startDate, endDate, {
count: 250,
offset: 0,
}, function(error, transactionsResponse) {
if (error != null) {
console.log(JSON.stringify(error));
return response.json({
error: error
});
}
// Pass the value into the stream.
trans.next(transactionsResponse);
});
// Every time the `trans.next(...)` line is called in the HTTP call,
// this function will be invoked.
trans.asObservable().subscribe(function (transactionsResponse) {
// use "transactionsResponse" how you please...
});
我们上面做的是创建一个名为trans
的主题。当您的HTTP响应返回时,我们将值添加到trans
主题流。在底部,我们订阅了该流,并且只要添加了某些内容,就会调用回调。通过这种方式,您始终拥有" access"你正在寻找trans,即使使用异步代码。
答案 2 :(得分:0)
您应该定义一个全局变量,即app
,并使用它来保存您需要的访问变量。就像那样:
app = {};
//....
var startDate = moment().subtract(30, 'days').format('YYYY-MM-DD');
var endDate = moment().format('YYYY-MM-DD');
plaidClient.getTransactions(AccessToken, startDate, endDate, {
count: 250,
offset: 0
}, function(error, transactionsResponse) {
if (error != null) {
console.log(JSON.stringify(error));
return response.json({
error: error
});
}
app.trans = transactionsResponse;
});
//....
console.log(app.trans); // should print correctly