如何多次使用同一个承诺
How to use same Promise more than one time?
// 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
中,我有一个需要解析的网站列表。我需要将所有站点的结果显示为一个列表。在我的搜索类中,我在所选网站上搜索不同的页面,然后通过承诺返回我的结果。目前,我仅从第一次resolve
呼叫中获取数据。是否有可能以某种方式使用它成倍?
在循环之前创建一个数组变量,而不是解析"父承诺",而是为循环中的每个请求将新的 Promise 推送到数组。然后在循环之后使用"Promise.all"等待所有承诺,然后解析父承诺。
像这样:
// 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));
});
});
};
请注意,我还没有尝试过(对不起,我知道这是一个糟糕的答案)我可能陷入了一些逻辑陷阱,但我认为你至少会明白它背后的逻辑。
相关文章:
- 当按下一个键时,请多次按下不同的键
- 多次调用另一个javascript函数中的javascript函数
- 使用jsreport在一个页面上多次呈现同一模板
- jQuery触发器事件在一个循环中多次出现
- 一个承诺换多个承诺-并发问题
- 在一个随机生成图像的PHP脚本中,为什么在一个页面上多次调用它总是生成相同的图像
- 一个函数的多次点击
- ES6 类扩展了另一个类并多次调用超级
- 在一个页面上多次使用相同的本地存储 ID
- 在一个页面上多次使用相同的JQuery标记输入框
- 我可以在一个视图上多次使用Marionette行为吗
- 对Javascript中的一个变量的多次访问
- 如何在一个视图中多次正确使用同一个AngularJS 1.5组件
- 了解如何设置一个任务来多次调用一个插件
- 一个案子有多次休息是不是不好的练习
- 更改<p>只需一个按钮即可多次使用
- 如何在一个页面中多次使用particles.js
- 我怎样才能发出一个能被多次听到的声音
- Javascript:承诺在多次尝试后等待条件或中止
- 在一个页面上多次隐藏/显示