私は約束を実装することができます。この機能を実行すると、配列の中に何かがありますか?。約束を正しく実装する方法
結果を関数にconsole.logできますが、結果が正しく返されると思いますが、res.jsonの結果には空の配列が表示されます。私はそれが関数が終了するよりも速く読み込むためだと仮定します。
const {grabArticles} = require('../controller/update.js');
// variables
const router = express.Router();
router.get('/new', (err, res) => {
const results = [];
const test = grabArticles(results)
test.then((results) => {
res.json(results);
})
});
//different file
const request = require('request');
const cheerio = require('cheerio');
grabArticles = (results) => {
// const results = [];
request("https://fivethirtyeight.com/", function(error, response, html) {
const $ = cheerio.load(html);
for (x=1; x<4; x++) {
// i is the current loop number, element=this is the current data requested
$('#home-feature-' + x.toString()).each((i, element) => {
const topic = $(element).children('.post-info').children('.topic').text().trim();
const title = $(element).children('.post-info').children('.tease-meta').children('.tease-meta-content').children('h2.article-title.entry-title').text().trim();
// console.log('topic: ' + topic + '\n' + 'title: ' + title);
const newArticle = {
topic: topic,
title: title
};
results.push(newArticle);
})
}
console.log('inside update.js' + results);
});
return results;
}
grabArticles'は 'Promise'はなく、私の後に配列 –
繰り返しは「約束は非同期コードを同期しないでください」返す必要がありますあなたが' ...(Ͼ˳Ͽ) –