将状态传递给Node.js中的异步函数的最佳方法

时间:2012-06-03 08:30:36

标签: node.js

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

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

1 个答案:

答案 0 :(得分:1)

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

https.get(..., (function(arg1, arg2, arg3) {
    return function() {
        saveData(arg1, arg2, arg3);
    }
})(localvar1, localvar2, localvar3));