事情很曲折,我某天在萌否收音機裏面聽到了一首歌,很好聽,叫 hypnotized
,於是紅心了。
過了幾天我再去聽——發現這首歌變了。
最後經過多方面求證,我大概得出結果就是應該有人傳錯了歌,然後後來有人重新傳了一遍,導致我聽的不是原來那首歌了。那我那天聽的那首歌到底叫什麼名字呢?
然後大致看了一下,雖然歌被重新傳了,但是這裏顯示的這首歌的時間沒變!還是11分鐘,目測是數據庫沒更新。
於是我就想了個笨辦法,去爬收音機裏面所有 tag 爲 東方project
的專輯,然後跑到專輯頁看歌曲的長度。
問題來了,如果我直接爬,然後爬完 callback
之後又直接爬,沒有任何間隔,就相當於我在 DDOS
它的站子。或者即使沒那麼嚴重——反正最後到一定程度併發太大我就訪問不了了。
於是我就想到了做一個任務隊列的 module。該 module 的作用就是把一堆任務扔到隊列中,完成一個纔開始下一個。
然後如果同時執行一個也太慢,module 還允許你開多幾個子隊列同時執行。
模塊的 repo 在 GitHub 上面。名字叫 Scarlet Task
的原因一是我本身就喜歡二小姐,二是爲了紀念這次事件我是爲了找有關二小姐的歌。
要安裝也很簡單:
1 | $ npm install scarlet-task |
然後 repo 的 README.md
裏面有使用方法的——大致就是實例化一個對象,然後定義好某個任務的任務標識(可以是字符串,可以是 json 對象,可以是任何類型的數據),然後再定義好處理這個任務的函數,將這個數據推倒隊列中即可。然後在處理函數中任務處理完的時候執行以下任務完成的函數即可。