Nodejs 异步代码变量共享的问题

发布于 2022-09-06 20:47:42 字数 1225 浏览 13 评论 0

也许题目说的还不是很明白,我就说一下我的需求吧

正在写一个爬虫类的NodeJs 程序,

由于有有防爬机制,所有请求需要带上cookie,通过cookie的值计算是sign值,才能正常返回数据, 问题是cookie会过期,如果cookie过期,请求返回失败,但是同时会返回新的cookie,

我的代码逻辑是这样的

class spider {
    constructor(){
        this.cookie = Cookie.getCookie() //返回Cookie
    }

    async getData(data){
        let url = this.makeUrl(data) //组装url
        const response = await request.get(url).setCookie(this.cookie)
        
        if(response.json.sucess){
            return reponse.josn //返回正确的数据,直接返回
        } else {
            //如果cookie 过期,更新cookie并重新请求一次
            this.refreshcookie(response)
            return this.getData
        }
    }
    
    refreshcookie(response){
        cookie.Update(response) //更据返回更新cookie
        this.cookie = cookie.getCookie
    }
}


const s = new spider()
async test(page){
    const data = s.getData({page: page})
    console.log(data
}

test(1)
如果请求一次,代码还是很正常的,如果cookie 程序自动更新cookie,重新请求返回了数据,最多请求2次就可以返回数据,


但是如果我有多个页面要取,
[1,2,3,4,5,6,7,8......100].forEach((page)=>{
    test(page)
})

如果cookie无效的话,代码会产生200次请求,因为cookie是在异步代码中更新,所以,前100次请求,全是无效请求



我希望的效果是,如果第1个异步中发现了,cookie无效,直接更新所有的异步代码更新this.cookie的值,有没有好的办法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昇り龍 2022-09-13 20:47:42

没人回答吗,如果有办法暂停所有异步代码也可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文