在javascript

时间:2016-07-02 22:46:30

标签: javascript node.js promise closures

我在某处读到,每当调用一个函数时,编译器都会将所有可见变量放在堆栈上,这也与闭包有些关系,现在使用下面的代码我不确定它是否在并发中工作像node.js这样的环境。

Product.prototype.list = function(body) {
    body.options = {
        hostname: endPoints.product,
        path: '/applications/' + body.entityType
        method: 'GET'
    };
    return remote.request(body)
        .then(function(result){
            body[body.entityType] = result;
            return body;
        });
};

现在如果使用promises同时调用以下两个函数,是否会发生闭包?例如

product.list({entityType: "coke"})
    .then(console.log); //will this have {coke: []} or {pepsi: []}

product.list({entityType: "pepsi"})
    .then(console.log); 

1 个答案:

答案 0 :(得分:1)

是的,您将传递给then的匿名函数创建一个闭包。正在关闭的变量是传递给外部body函数的list值。

每次调用list - 在上面的示例中,您已经调用了两次 - 您正在向body对象添加一些值,然后实例化一个新的闭包并使该值可用为了它。您传递给list的每次调用的值都是对象文字,这意味着它们完全分离,您将把不同的值交给闭包,因此无法调用涉及& #39;焦炭'将永远与涉及' pepsi'。

的电话有关