如何在nodeJs中打破循环?

时间:2017-12-16 17:56:16

标签: javascript node.js

我正试图从网站上抓取图片。我只想从该网站获得15张图片。但它将所有图像保存在我的图像文件夹中。我怎样才能摆脱循环?我正在使用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张图像。我哪里错了?

1 个答案:

答案 0 :(得分:0)

通常情况下我会说,看看filter数组,然后是slice数组,然后是forEach,然后就可以了。但是你想保持原始索引,所以它会使它稍微复杂化。但这应该有效:

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));
                });
        }
    }
}