循环中处理某个变量,循环结束后使用这个变量。在同步中这不是事,但是在异步中,这个问题就变的特别的困难了。
首先我说说遇到的业务需求,我有一段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)
})
})
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。