循环中处理某个变量,循环结束后使用这个变量。在同步中这不是事,但是在异步中,这个问题就变的特别的困难了。
首先我说说遇到的业务需求,我有一段html代码,其中有不定数量的img标签,要依次将img标签对应的图片上传的微信服务器上,每上传成功一张图片,微信服务器返回一个url,将img标签中的src值换成微信返回的url值,然后将上面的html代码上传
我直接说我的做法吧!
首先我用到了async cheerio包,你需要:
npm install --save async cheerio
需要用到eachSeries(arr, iterator, [callback])方法
这个函数的作用就是将arr中的每一个元素执行玩iterator之后,调用callback,--注意callback这里只会调用一次,即arr中的元素都遍历之后才会调用callback

    content = '<div>...</div>' //content是一段html
    const $ = cheerio.load(content);

    // $("img") 是一个Object

    let newArray = [];
    for(var img=0; img < $("img").length; img++){
        newArray.push($("img")[img]);
    }

    async.eachSeries(newArray,function(curr,callback){
        let src = curr.attribs.src;
        api.uploadImage("./public"+src, function(err,result){
            if(err){
                console.log("err",err)
            }else{
                content = content.replace(src,result.url);
                // callback(null,content)
                callback(null)
            }
        })
    },function(err){
        console.log("content:",content)
    })
})

l2xBrain
292 声望6 粉丝

Done is better than perfect