鍍金池/ 問答/HTML/ Nodejs 異步代碼變量共享的問題

Nodejs 異步代碼變量共享的問題

也許題目說的還不是很明白,我就說一下我的需求吧

正在寫一個(gè)爬蟲類的NodeJs 程序,

由于有有防爬機(jī)制,所有請(qǐng)求需要帶上cookie,通過cookie的值計(jì)算是sign值,才能正常返回?cái)?shù)據(jù), 問題是cookie會(huì)過期,如果cookie過期,請(qǐng)求返回失敗,但是同時(shí)會(huì)返回新的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 //返回正確的數(shù)據(jù),直接返回
        } else {
            //如果cookie 過期,更新cookie并重新請(qǐng)求一次
            this.refreshcookie(response)
            return this.getData
        }
    }
    
    refreshcookie(response){
        cookie.Update(response) //更據(jù)返回更新cookie
        this.cookie = cookie.getCookie
    }
}


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

test(1)
如果請(qǐng)求一次,代碼還是很正常的,如果cookie 程序自動(dòng)更新cookie,重新請(qǐng)求返回了數(shù)據(jù),最多請(qǐng)求2次就可以返回?cái)?shù)據(jù),


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

如果cookie無效的話,代碼會(huì)產(chǎn)生200次請(qǐng)求,因?yàn)閏ookie是在異步代碼中更新,所以,前100次請(qǐng)求,全是無效請(qǐng)求



我希望的效果是,如果第1個(gè)異步中發(fā)現(xiàn)了,cookie無效,直接更新所有的異步代碼更新this.cookie的值,有沒有好的辦法。

回答
編輯回答
氕氘氚

沒人回答嗎,如果有辦法暫停所有異步代碼也可以

2018年6月29日 16:09