I read somewhere that whenever a function gets called, the compiler puts all the visible variables on a stack, somewhat related to closures as well, now with the following code I'm not really sure if it'd work in a concurrent environment like 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;
});
};
Now if the following two function gets called concurrently using promises, will a closure occur? For instance
product.list({entityType: "coke"})
.then(console.log); //will this have {coke: []} or {pepsi: []}
product.list({entityType: "pepsi"})
.then(console.log);
Yes a closure will be created by the anonymous function you pass to then
. The variable which is being closed over is the body
value being passed in to the outer list
function.
Each time you call list
- in the above example you've called it twice - you are adding some values to the body
object and then instantiating a new closure and making that value available for it. The values that you're passing to each call of list
are both object literals which means they're completely separate and you will be handing different values to the closure so there is no way the call involving 'coke' will ever have a connection to the call involving 'pepsi'.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.