При построении довольно сложного скребка я наткнулся на проблему с потоком управления моего кода.Узел async.series problem
Что происходит в коде ниже: 1) запрос URL 2) скоблить NEWURL из результатов 3) передать его читаемости API в первой функции асинхронной 4) здесь приходит беда - я никогда не получить следующий асинхронная функция, которая сохраняет читаемость данных для DB
Как решить эту проблему? Я новичок в JS, поэтому, пожалуйста, не стесняйтесь указывать на какие-либо проблемы с моим кодом.
request(URL, function(error, response, html) {
if (!error) {
var $ = cheerio.load(html);
NEWURL = data.find('a').attr('href');
readabilityData = {}
var articleUrl = 'https://readability.com/api/content/v1/parser?url=' + NEWURL + token;
async.series([
function(){
request(articleUrl, function(error, response, html) {
if (!error) {
readabilityData = response.toJSON();
}
});
},
function(readabilityData){
Article.findOne({
"link": url // here's the
}, function(err, link){
if(link) {
console.log(link)
} else {
var newArticle = new Article({
// write stuff to DB
});
newArticle.save(function (err, data) {
// save it
});
}
});
}
],
function(err){
console.log('all good — data written')
});
});
}
});
ты говоришь, что функция, в которой вы написали Article.findOne .... никогда не вызывается? – Sikorski
Да, точно. Извините за плохое описание. – walkthroughthecode