0
私はクローラを使用してWebスクレーパーを構築しようとしています。私は少しこれが新しいので、ラッパー関数を作成しようとしました:成功するまでの再帰NodeJS HTTPリクエスト
const request = require('request')
var crawlera = {
apikey: 'asdfasdfasdfasdf',
limit : 10,
count : 0
}
crawlera.get = (url) => {
console.log('count: ' + crawlera.count + ' limit: ' + crawlera.limit)
var promise
if(crawlera.count < crawlera.limit){
promise = new Promise((resolve, reject) =>{
let options = {url: url, proxy: 'http://'+crawlera.apikey+':@proxy.crawlera.com:8010', "rejectUnauthorized": false}
request(options, (err, res, html) => {
crawlera.count -= 1
if (err) {
console.log('Proxy Error. Retrying..')
crawlera.get(url)
} else{
console.log('Crawlera: ' + url)
results = {}
results.html = html
results.url = options.url
resolve(results);
}
})
crawlera.count+=1
})
return promise
} else{
return Promise.resolve('concurrency count maxed')
}
}
module.exports = crawlera
私は私の主なアプリケーションで呼び出します。
crawlera.get('http://someurl').then(res => console.log('do something with the result.')
上記の操作では、プロキシエラーのタイムアウトが発生することがあります。だからこそ、私は、成功が起こるまでリクエストをやり直してからチェーンを続けますが、19行目はこれを達成していません。
関連する回答:[Promise Retry Design Patterns](http://stackoverflow.com/questions/38213668/promise-retry-design-patterns/38214203#38214203)と[Promise Retry Step](http:// stackoverflow。 co.jp/questions/37993365 /再試行 - 約束手続き/ 37995874#37995874)。 – jfriend00