2016-12-24 3 views
1

Я создаю данные JSON, и мне трудно изменить свойство sub моих данных.Nodejs: Как вызвать функцию дважды с другим параметром?

Для моего первого обещания я хочу, чтобы свойство каждого объекта sub содержало значение theonion. Для второго обещания, я хочу, чтобы это было nottheonion. Однако оба файла (onion.json и nottheonion.json) в конечном итоге идентичны, оба содержат данные из r/nottheonion

Вот мой код.

function parse(html, subreddit) { 
    var $ = cheerio.load(html); 

    $("div#siteTable > div.link").each(function(idx) { 
     var title = $(this).find('p.title > a.title').text().trim(); 
     posts.push({ sub: subreddit, content: title }); 
    }); 

    var posts_as_json = JSON.stringify(posts); 
    return posts_as_json; 
} 

var append = file => content => fsp.appendFile(file, content); 

rp(onion_url) 
    .then(html => parse(html, "onion")) 
    .then(append('onion.json')) 
    .then(() => console.log('Onion Success')) 
    .catch(err => console.log('Error: ', err)); 

rp(not_onion_url) 
    .then(html => parse(html, "nottheonion")) 
    .then(append('not_onion.json')) 
    .then(() => console.log('Not Onion Success')) 
    .catch(err => console.log('Error: ', err)); 
+0

где 'posts' объявлен? Вы знаете, что обе обетования имеют один и тот же массив 'posts'-array? – Thomas

ответ

0

Попробуйте это:

function parse(html, subreddit) { 
    var p = subreddit; 
    var $ = cheerio.load(html); 

    $("div#siteTable > div.link").each(function(idx) { 
     var title = $(this).find('p.title > a.title').text().trim(); 
     posts.push({ sub: p, content: title }); 
    }); 

    var posts_as_json = JSON.stringify(posts); 
    return posts_as_json; 
} 
+0

Это работает. Не так, как я предполагал, но я понял, что у меня может быть только один JSON-файл с r/theonion и r/nottheonion в нем, что и делает этот код. Он записывает оба файла с данными из обоих подзадач. Благодарю. – user298519

+0

Я не уверен, но var append = file => content => fsp.appendFile (файл, содержимое); выглядит неправильно для меня ..... не должно быть var append = (file, content) => fsp.appendFile (файл, контент); передавая ему контент из предыдущего обратного вызова –

Смежные вопросы