美文网首页
Generator从文件读取到网络请求

Generator从文件读取到网络请求

作者: JohnYuCN | 来源:发表于2022-02-05 15:03 被阅读0次

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()

相关文章

网友评论

      本文标题:Generator从文件读取到网络请求

      本文链接:https://www.haomeiwen.com/subject/dnaekrtx.html