// App.js
sites[site_name].search(value).then(function(results) {
console.log(results);
});
// SearchClass.js
Search.prototype.search = function(search) {
var self = this;
this.params['wa'] = search;
return new Promise(function(resolve, reject) {
self.resolve = resolve;
self.reject = reject;
request(SEARCH_URL + '?' + querystring.stringify(self.params), function (error, response, body) {
if (!error && response.statusCode == 200) {
// Some code
for (var i = 1; i <= pages; i++) {
// Some Code
request(SEARCH_URL + '?' + querystring.stringify(self.params), function (error, response, body) {
if (!error && response.statusCode == 200)
self.resolve(body);
});
}
}
});
});
};
在我的app.js
我有一个我需要解析的网站列表。我需要将所有网站的结果显示为一个列表。在我的搜索类中,我在所选网站上搜索不同的页面,然后通过promise返回我的结果。目前我只从第一次resolve
电话中获取数据。有可能以某种方式使用它倍增时间吗?
答案 0 :(得分:2)
在循环之前创建一个数组变量,而不是解析&#34;父承诺&#34; ,为循环中的每个请求推送一个新的Promise到数组。循环后使用`Promise.all&#39;等待所有承诺,然后解决父承诺。
这样的事情:
// SearchClass.js
Search.prototype.search = function(search) {
var self = this;
this.params['wa'] = search;
return new Promise(function(resolve, reject) {
request(SEARCH_URL + '?' + querystring.stringify(self.params), function (error, response, body) {
if (error || response.statusCode !== 200) {
return reject(error || response.statusCode);
}
var promises = [];
for (var i = 1; i <= pages; i++) {
promises.push( new Promise(resolve,reject){
request(SEARCH_URL + '?' + querystring.stringify(self.params), function (error, response, body) {
if (!error && response.statusCode == 200){
resolve(body);
}
else {
reject(error || response.statusCode);
}
});
});
}
resolve(Promise.all(promises));
});
});
};
请注意,我还没有尝试过(对不起,我知道这是一个糟糕的答案)我可能已陷入某种逻辑陷阱,但我认为你会得到它背后的逻辑至少