首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从回调循环中捕获值

从回调循环中捕获值
EN

Stack Overflow用户
提问于 2017-03-03 11:57:09
回答 1查看 153关注 0票数 0

我有一个循环,它执行异步get方法,在完成时调用回调。在回调中,我需要知道回调链接到哪个循环。

我猜想这可能与闭包有关,但并不真正理解我需要更改什么才能从for循环中捕获键。

附带注意:我知道循环遍历Redis键通常是不好的做法,但在这种情况下只有少数几个键。

代码语言:javascript
复制
 let redisGetCallback = function(err, getResponse) {
  numberOfLoops++;
  let user = JSON.parse(getResponse);

  if(user.uid === userInfo.uid) {
    user.grantedPermission = true;
    let userSerialised = JSON.stringify(user);

    redis.set('!!NeedTheKeyFromTheForLoopBelowHere!!', userSerialised.....

  } else if (numberOfLoops === numberOfKeys) {
    cb(false);
  }
};

for (let i = 0; i < keys.length; i++) {
  redis.get(keys[i], redisGetCallback);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 12:23:31

如果您想知道给定回调中i的值,那么不要:

代码语言:javascript
复制
for (let i = 0; i < keys.length; i++) {
  redis.get(keys[i], redisGetCallback);
}

运行它时:

代码语言:javascript
复制
for (let i = 0; i < keys.length; i++) {
  redis.get(keys[i], redisGetCallback(i));
}

并将redisGetCallback更改为:

代码语言:javascript
复制
let redisGetCallback = function(err, getResponse) {
};

至:

代码语言:javascript
复制
let redisGetCallback = number => (err, getResponse) => {
};

您将在回调中以number的形式获得正确的号码。

当然,您的实现可能存在其他问题,因此您可能需要进行更多的更改,但基本思想是,与其依赖全局变量,不如将正确的值作为参数传递。

请记住,您永远不知道回调的调用顺序,因此可以先调用最后一个回调,如果按其运行顺序计算回调的数量,则不一定与按已注册的顺序进行回调的次数相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42578297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档