【发布时间】:2018-06-02 08:05:10
【问题描述】:
tl;dr 在 Promises 方面需要一些帮助。
这里有一个小爬虫功能,它的核心是:
function request(method, url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = resolve;
xhr.onerror = reject;
xhr.send();
});
}
我还有一个相当大的配置文件列表要解决:
const profiles = ['http://www.somesite.com/profile/1',
'http://www.somesite.com/profile/2'] // 100+ more
我如何分批处理它们,比如一次 5 个?
到目前为止,这是我的思考过程:
- 使用_.chunk()分割成N个块
- 等待 Promise.all() 解析所述块
这是我目前所拥有的:
async function processProfileBatch(batchOfUrls) {
let promises = [];
// Populate promises
for (let i = 0; i < batchOfUrls.length; i++) {
let url = batchOfUrls[i]
promises.push(request('GET', url))
}
// Wait for .all to resolve
return await Promise.all(promises)
}
const profileBatches = _.chunk(profileLinks, 3)
for (let i = 0; i < profileBatches.length; i++) {
let processedBatch = await processProfileBatch(profileBatches[i])
console.log(new Date(), 'processedBatch', processedBatch);
}
不幸的是,这只是返回ProgressEvents;经检查,其中包含的 xhr 已将 .responseText 设置为“”,即使 readyState 为 4:
【问题讨论】:
标签: javascript async-await xmlhttprequest es6-promise