Это то, что у меня есть:
promises[i].then(function(data) {
console.log("In function ", this.query);
processSearchResults(data,this.query);
});
Кодекса печатает «в функции не определены».
The spec мандаты, что обратный вызов вызываются ни с чем значением this
, так this
будет ссылаться на глобальный объект (window
) в неаккуратном режиме, который не имеет свойства .query
. В строгом режиме вы получили бы исключение, если this
был undefined
.
Как получить доступ к значению объекта обещания из функции «then» ?
Специального метода нет. Обычно вам не нужно обращаться к обещанию как к объекту, это только прозрачное значение, представляющее единственный результат асинхронного вычисления. Все, что вам нужно сделать, это вызвать его метод .then()
- и внутри обратного вызова нет причин для доступа к объекту обещания, потому что имеющаяся информация уже доступна вам (data
и тот факт, что был вызван обратный вызов выполнения).
Так что, если вы хотите получить доступ к своему имуществу .query
, вам нужно будет использовать promises[i]
, как обычно. Тем не менее, you will need a closure для i
поэтому лучше использовать map
в любом случае и удерживайте query
строку в замыкании непосредственно вместо того, чтобы это свойство на обещание объекта:
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);
});
если 'performSearch' возвращает обещание, то' данные 'также является обещанием. –
@BenFortune: 'data' не является обещанием - это не должно быть обещанием по спецификации? – Bergi
Данные @BenFortune не являются обещанием. Я установил свойство запроса на объект обещания. Я хочу получить доступ к этому свойству из функции then –