Рекурсивный NodeJS HTTP-запрос на сбой до успеха

Я пытаюсь построить веб-скребок, используя crawlera. Я немного новичок в этом, и поэтому я попытался создать функцию-оболочку:

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.')

Приведенная выше операция иногда получает тайм-аут ошибки прокси. Поэтому, когда это происходит, я хочу в значительной степени повторить запрос еще раз, пока не произойдет успех, а затем продолжить работу по цепочке.hen, но строка 19 не достигает этого.

1 ответ

Я думал, что вы должны изменить строку 19

crawlera.get(url);в crawlera.get.call(crawlera, url);

Когда функция вызывается в цепочках, контекст меняется, вы должны привязать ее к исходному объекту обхода контента.

И я не знаю, почему вы добавляете это в строке 16 crawlera.count -= 1,

После удаления и изменения строки 19 все работает хорошо.

Другие вопросы по тегам