2017-12-16 9 views
-1

私はウェブサイトからイメージを掻き集めようとしています。私は、そのサイトから15枚の画像しか必要としません。しかし代わりに、すべての画像を画像フォルダに保存します。ループからどのように壊れますか?私はnodejsを使用しています。nodeJsでループを解除する方法は?

function (res) { 
    mkdirp('public/images/'+req.body.tags, function (err) { 
     if (err) console.error(err); 
     else { 
      let count = 1; 
      for(i=0;i<res.length;i++){ 
       var k = res[i].url.slice((res[i].url.lastIndexOf(".") - 1 >>> 0) + 2).slice(0,3); 
       if (count<=15){ 
       if (k=="jpg" || k=="png") { 
        console.log(count) ; 
        request (res[i].url).pipe(fs.createWriteStream('public/images/'+req.body.tags+'/'+req.body.tags+i)) 
        count++; 
       } 
       } else { 
       break; 
       }         
     }     
    }); 
} 

ここでbreakは機能しません。 15枚以上の画像を保存し続けます。私はどこに間違っていますか?

+0

'(I = 0; I mplungjan

+0

'数++'常に数 'しようと動作しないことができます=カウント+ 1 'となる。変数 'k'を呼び出さないでください。あなたは一番長いコード行を持っており、次に変数 'k 'を呼び出すことを選択します。 – Pavlo

+2

@Pavlo何ですか? _count ++が必ずしも動作しない_ ???? – mplungjan

答えて

0

通常は、私は、sliceの配列、次にforEachの配列を見て、ちょうどfilterと言うでしょう。しかし、元のインデックスを維持したいので、少し複雑になります。しかし、これは動作するはずです:

function (res) { 
    mkdirp("public/images/" + req.body.tags, function (err) { 
     if (err) { 
      console.error(err); 
     } else { 
      res 
       .map((r, i) => ({ resource: r, index: i })) 
       .filter(item => { 
        var ext = item.resource.url.substr(item.resource.url.lastIndexOf(".") + 1); 
        return ext === "jpg" || ext === "png"; 
       }) 
       .slice(0, 15) 
       .forEach(item => { 
        request(item.resource.url) 
         .pipe(fs.createWriteStream(
          "public/images/" + 
          req.body.tags + "/" + 
          req.body.tags + item.index)); 
       }); 
     } 
    } 
} 
+0

私は急いでいて、まっすぐ考えていませんでした。そして、この時点でそれらのうちの1つが削除されたものとして表示されます。 –

関連する問題