gpt4 book ai didi

javascript - 用于缓存的 Node.js 同步请求

转载 作者:行者123 更新时间:2023-12-02 13:56:35 26 4
gpt4 key购买 nike

我的代码中有一个与缓存 API 结果有关的问题需要解决。我有一些 async.map 像这样:

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。

但是,我意识到缓存对于我的方法根本没有多大用处,因为我的代码将分派(dispatch) 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...
}

最佳答案

您可以使用 async.eachSeries 迭代 allUsers 。这将按顺序逐步执行并保持异步。

async.eachSeries(allUsers, (user, done) => {
const requestList = fill(cache, locations, apiUrl, cacheMap);

async.map(requestList, (obj, callback) => {
// ..

callback(null, requestResult);
}, (err, results) => {
// PUT RESULTS INTO A CACHE

done(null, results);
});
}, cb);

关于javascript - 用于缓存的 Node.js 同步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com