我有一个Node.js应用程序,其中包含异步代码:
var localvar1 = ...;
var localvar2 = ...;
var localvar3 = ...;
// do async database query
conn.query("select ...", function(err, res) {
// fetch results asynchronously
res.fetchAll(function(err, rows) {
if (rows.length == 0) // no, data, fetch from external HTTP source
{
// fetch from Internet asynchronously
https.get(..., function() {
// ok, got it, now save
// I need values from original function here ***
saveData(localvar1, localvar2, localvar3);
});
}
});
);
将localvar1-3的值传递给最内层函数的最佳方法是什么?
如果你为此建议一些库,请提供与我上面编写的代码一起使用的示例代码。
答案 0 :(得分:1)
由于闭包,内部函数可以访问在外部函数或模块本身中定义的局部变量,因此如果 localvar1
,et.al.,您编写的代码将工作,在等待调用https.get()
回调时不要更改。如果它们确实发生了变化,您的回调将会看到它们的新值,而不是它们在请求时的值。如果这是一个问题,请创建一个新的闭包来“陷阱”它们:
https.get(..., (function(arg1, arg2, arg3) {
return function() {
saveData(arg1, arg2, arg3);
}
})(localvar1, localvar2, localvar3));