我只是新進入節點,並結束新到async.js。我不確定我想做的事情是可行的(猜測是),或者我的做法是正確的(猜測它不是)。這裏是:node.js嵌套async.eachSeries
這段代碼是爲了管理一些instagram數據,所以我會根據代碼實際需要做些什麼來解釋一切,以便更容易理解。
連接到MongoDB中,得到一些的Instagram賬戶的ID(完成)
每個ID我想要得到的拉斯10個(我已經有一個保存在我的數據庫)。
對於每個帳戶的10個項目,我需要獲得(評論+喜歡)的總和並將該值與第一個eachSeries調用的out代碼相比較。
router.get('/users_all', function(req, res) { User.find().sort({'counts.followed_by': 'descending'}).exec(function(err, users) { async.eachSeries(users, function(item, outerCallback) { Media.find({'userId': item.user_id}).exec(function(err, medias) { var count = 0; async.eachSeries(medias, function(item, outerCallback2) { count += item.comments_count + item.likes_count; }); }); item.totalAmount = count; }); res.json(users); }); }
我剛纔沒有設置回調召喚出每個eachSeries的怎麼一回事,因爲我不知道往哪裏放他們,我想我的代碼更容易理解這種方式。
如果需要更多關於代碼請求的澄清。 感謝您的幫助。
你是對的,我簡單的代碼不要錯過10從媒體模型的結果,但我只是取代了我的代碼中的Media.find。它工作完美,感謝您的幫助。不得不要求從這裏學到一些東西:你基本上使用回調來「以某種方式」結束eachSeries循環的每次迭代,並在添加到eachSeries方法的函數中得到結果?這很簡單嗎?謝謝 –
不是超級經驗豐富,可能會說一些錯誤,但我的理解基本上不是返回來結束函數說你已完成處理,而是讓eachSeries函數知道通過該回調完成了迭代。然後,一旦完成,您可以定義自己的回調,一旦數組中的每個回調完成,就會調用回調。所以!那簡單!你也可以在你的回調中包含錯誤主體,異步處理這些有點不同。 –