私はExpress.jsを使ってNode.jsアプリケーションを作っています。私は他のサイトからいくつかのデータをレンダリングするページを持っています。 Cheerio.jsで使用していますが、問題はありませんが、問題は、廃棄作業が完了したときにどのようにレンダリングできるかわかりません。私は以下のようなコードを作った、見てください。いくつかの方法がそれを行うにはNode.jsタスクが完了したときのres.render
var urls = [ 'http://a.com/fruits', 'http://a.com/cars', 'http://a.com/toys' ]
function getData(){
// get html and parse, return some data.
...
}
var data_set = '';
for (var i=0; i< urls.length ; i++){
data_set += getData(urls[i]);
}
// When get all data, render <------ How can I catch when?
res.render('some_page', { data : data_set });
思想、
#1 - レンダリング時にi == urls.length
for (var i=0; i< urls.length ; i++){
data_set += getData(urls[i]);
if(i == urls.length){
res.render(....);
}
}
// Result :
// The data has not been scrapped, so the page wouldn't display data fully.
#2 - コールバックのgetData(と)
function getData(callback){
// get html and parse, return some data.
...
// when complete, callback();
}
var someHelper = 0;
getData(function(){ someHelper ++ ;});
if (someHelper == 3){
res.render(...);
}
// If someHeper is not 3, the page would not rendered.
// And `if statement` executed before someHelper == 3 at times ==> infinite page loading (error)
私はどうすればできますかこれを避けますか?私は使用する必要がありますPromise
?... いくつかの点で私を助けてください。
私はこのことを約束しています – kiro112
@ kiro112私はコンパイルされたテンプレートが何であるか分かりません。 – Juntae