在异步函数调用之外使用变量
问题描述:
我在这里看到了很多帖子,展示了如何使用回调进行异步函数调用。我已经做到了,但是,我似乎无法找到如何在函数外部使用从函数中检索的变量。在异步函数调用之外使用变量
var json = JSON.parse(body);
var accountID = json.accountId;
var getMatchData;
getRecentMatchData(accountID, function(err, res) {
getMatchData = res;
//console.log(res);
});
console.log(getMatchData);
我想使用getMatchData传递到我的app.post中的其他函数,但它打印出未定义。我如何访问此变量以在异步方法之外使用?我是否使用另一个回调?
答
在这种情况下,你将不得不使用类似异步瀑布的东西。最后它意味着另一个回调。 您的示例代码示例是为了写出正确的重构,但这会有所帮助。
async.waterfall([
function(callback) {
getRecentMatchData(accountID, function(err, res) {
callback(err, res);
getMatchData = res;
//console.log(res);
})
},
function(getMatchData, callback) {
// getMatchData now equals 'res'
// do what you have to do with getMatchData
callback(null, 'result');
}
], function (err, result) {
// result now equals 'result'
});
+0
This看起来我只是最终做了中间块中的所有事情,这正是我在getRecentMatchData函数调用中所做的一切。听起来好像没有真正的方法让我在函数调用之外使用变量。最后一个函数只是错误检查,对吧? –
+0
最后一个函数是异步瀑布的回调。如果发生错误,它也会返回错误。 – Cleriston
的[我如何返回从一个异步调用的响应?(可能的复制https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - 异步调用) – cartant
将* console.log(getMatchData)*放到异步函数调用的成功块中,或者将console.log放入函数中,然后在成功块上执行该函数。 至少这是我在做js filereader api时所做的。这就是我在我的ajax调用中所做的。 如果你试图在调用它后立即使用一个依赖于异步函数结果的变量,你总是会得到未定义的 – Merigold
代码是异步的,你需要将'console.log(getMatchData)'移动到函数处理器中 –