我有一個問題需要在我的代碼中解決,這與緩存API結果有關。我有一些async.map像這樣:node.js在緩存中使用同步請求
for(var user of allUsers) {
var requestList = fill(cache, locations, apiUrl, cacheMap);
async.map(requestList, function(obj, callback) {
// ...
}, function(err, results) {
// PUT RESULTS INTO A CACHE
});
}
功能fill
只是看起來在緩存中,看是否在locations
的位置存在,並且它不是爲將要運行我的API請求的URL。
但是我意識到緩存對於我的方法根本沒有多大用處,因爲我的代碼會調度async.map並立即開始下一個循環迭代fill
,這意味着緩存將不會在用戶的每次迭代中同步。
我該如何去確保用戶的每次迭代都有最後一位用戶的緩存更新版本?我需要非常聰明地使用我有限的API調用,所以如果有重複的請求我想請求一次,那麼在稍後的請求中從緩存中取出結果。
我現在唯一經歷的是將一個同步的請求,而不是一個async.map,但我知道這違背了node.js的設計。
for(var user of allUsers) {
var requestList = fill(cache, locations, apiUrl, cacheMap);
// sync map instead
requestList.map(function(obj) {
var res = sync-request(obj)
// put request result into cache
});
// cont...
}
它是否保證按順序運行系列?謝謝! –
是的,它會保證順序。如果你只使用'.each',那麼它將不會得到保證,因爲它們將平行運行 – cejast