0

我有一个带有异步代码的 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 的值传递给最内层函数的最佳方法是什么?

如果您为此建议一些库,请提供可以与我上面编写的代码一起使用的示例代码。

4

1 回答 1

1

多亏了闭包,内部函数可以访问外部函数或模块本身中定义的局部变量,因此如果 localvar1在等待https.get()调用回调时不更改等,您编写的代码将可以工作。如果它们确实发生了变化,您的回调将看到它们的新值,而不是它们在请求时的值。如果这是一个问题,请创建一个新的闭包来“捕获”它们:

https.get(..., (function(arg1, arg2, arg3) {
    return function() {
        saveData(arg1, arg2, arg3);
    }
})(localvar1, localvar2, localvar3));
于 2012-06-03T19:29:06.603 回答