我正在使用node.js的Q库。我正在尝试打印一个报告,该报告将打印查询名称和结果。这就是我所拥有的。代码打印"在函数undefined中。如何从"然后"中访问promise对象的值。功能?
var queries = ["2091 OR 2092 OR 2093",
"2061 OR 2062",
"2139 OR 2140 OR 2141"
];
var promises = new Array();
for (var i=0; i<queries.length; i++) {
promises[i]=performSearch(queries[i]);
promises[i].query = queries[i];
console.log("Outside function ", promises[i].query);
promises[i].then(function(data) {
console.log("In function ", this.query);
processSearchResults(data,this.query);
});
}
Q.allSettled(promises).then(function(results) {
endFunction();
});
答案 0 :(得分:1)
这就是我所拥有的:
promises[i].then(function(data) { console.log("In function ", this.query); processSearchResults(data,this.query); });
代码打印&#34;在函数undefined&#34;。
The spec强制要求调用回调,而this
值没有任何内容,因此this
将以草率模式引用全局(window
)对象,没有.query
属性。在严格模式下,this
为undefined
时,您会遇到异常。
如何从&#34;然后&#34;中访问promise对象的值。 功能?
没有特殊方法。您通常不需要将promise作为对象访问,它只是表示异步计算的单个结果的透明值。您需要做的就是调用它的.then()
方法 - 并且在回调中,没有理由访问promise对象,因为它所拥有的信息已经可以访问({{1 ,以及调用履行回调的事实。)
因此,如果您想访问data
媒体资源,则必须像往常一样使用.query
。但是promises[i]
为i
,因此您最好使用map
并直接在闭包中保留query
字符串,而不是将其作为promise对象的属性:
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);
});