This is what I have:
promises[i].then(function(data) {
console.log("In function ", this.query);
processSearchResults(data,this.query);
});
The code prints "In function undefined".
The spec mandates that the callback is called with nothing for the this
value, so this
will refer to the global (window
) object in sloppy mode, which does not have a .query
property. In strict mode you'd have gotten an exception when this
was undefined
.
How do I access the value of the promise object from within the "then"
function ?
There is no special method. You usually will not need to access a promise as an object, it's only a transparent value representing the single result of an asynchronous computation. All you need to do with it is to call its .then()
method - and inside the callback, there's no reason to access the promise object, because the information it holds is already accessible to you (data
, and the fact that the fulfillment callback was invoked).
So if you want to access your .query
property, you'd have to use promises[i]
as usual. However, you will need a closure for i
so you'd better use map
anyway and hold the query
string in the closure directly instead of making it a property on a promise object:
var queries = ["2091 OR 2092 OR 2093",
"2061 OR 2062",
"2139 OR 2140 OR 2141"
];
var promises = queries.map(function(query) {
var promise = performSearch(query);
console.log("Outside function ", query);
var processedPromise = promise.then(function(data) {
console.log("In function ", query);
return processSearchResults(data, query);
});
return processedPromise; // I assume you don't want the unprocessed results
});
Q.allSettled(promises).then(function(processedResults) {
endFunction(processedResults);
});