1. 单网络请求(只抓取文件中的第一个id进行网络请求)
//npm install -S node-fetch@2 co
const fs=require('fs/promises')
const fetch=require('node-fetch')
const co=require('co')
function* gen(filename){
//从文件中读到id(假设文件中的内容“1,2,3”)
let ids=yield fs.readFile(filename,'utf-8')//"1,2,3"
let id=ids.split(',').unshift()//"1"
let resp=yield fetch('http://johnyu.cn:3000/albums/'+id)
let album=yield resp.json()
return album.name
}
//协程方式的调用
function main(){
let g=gen('./ids.txt')
g.next().value//next().value:是fs.readFile()返回的Promise对象
.then(id=>g.next(id).value)//id是fs.readFile()的结果,next().value是fetch()返回的Promise对象
.then(resp=>g.next(resp).value)//resp是fetch的结果,value是resp.json()返回的Promise对象
.then(album=>g.next(album).value)//album是
.then(name=>console.log(name))
}
//使用co库完成调用
function main1(){
co(gen,'./ids.txt')
.then(info=>console.log(info))
}
main();
2. 多网络请求
const fetch=require('node-fetch')
const co=require('co')
const fs=require('fs/promises')
function* gen(filename){
//假定文件中内为1,2,3
let ids=yield fs.readFile(filename,'utf-8')//"1,2,3"
let idList=yield ids.split(',')//转化成为id数组['1','2','3']
let respList=yield idList.map(id=>{
return fetch("http://johnyu.cn:3000/albums/"+id)
})
let albums=yield respList.map(resp=>resp.json())
return albums.map(album=>album.name);
}
function main(){
co(gen,"./ids.txt")
.then(as=>console.log(as))//[ '勇气', '年少有为', '当真' ]
}
main()
网友评论