1
私はcheerioでデータスクラップを構築し、URLの配列からデータを取得しました。それは、私が廃棄したデータよりも多くのURLの正確な同じ配列を返します。私はこれをやってみましたが、動作しません処理エラーオーバーループ配列要求
function getNbShares(urls) {
return Promise.map(urls, request).map((htmlOnePage, index) => {
const $ = cheerio.load(htmlOnePage),
share = $('.nb-shares').html();
return {
url: urls[index],
value: share
};
});
}
:
function getNbShares(urls) {
return Promise.map(urls, request).map((htmlOnePage, index) => {
const $ = cheerio.load(htmlOnePage);
if(error) {
return {
url: urls[index],
value: null }
} else {
share = $('.nb-shares').html();
if (!share) {
return {
url: urls[index],
value: null }
} else {
return {
url: urls[index],
value: share
};
}}
});
}
[{url: urls, value: share}]
それは完璧に働いていますが、エラーを処理しない:私の出力配列は、このようにフォーマットされますそのアイデアは何が起こったとしても、URLが返答しない場合、またはスクラップが動作しない場合、常にURLに返されます。
私はこのfunction(req,error)
のような機能を渡す必要がありますが、私は場所を正確に...
私はこの '.catchような試み(関数(ERR){1)、リターンurls.splice(URLの[インデックス]を、getNbShares(のURL);});'が、動作しません。アイデアは私がエラーをキャッチするだけでなく、同時に私の配列を構築する必要があるということです。 –
.mapの代わりにPromise.reduceを使うのはどうでしょうか?配列に入れたくない "エラー"や値がある場合は、そうする必要はありません。 – Rastalamm
実際、オブジェクトとして配列にすべてを入れたいと思います。私はちょうどエラーがキャッチされている場合、そのgetNbShares(URL)を停止したくないです。私の質問ははっきりしているのですか、それとも書き直すべきですか? –