【问题标题】:Not able to modify value in javascript callback [duplicate]无法修改javascript回调中的值[重复]
【发布时间】:2015-10-25 02:52:11
【问题描述】:

我无法在回调中修改 outputString 变量的值。

var outputString;

    client.get(key,function(err,value){

                        outputString = "key="+key+" value="+value ;
                        console.log(outputString);

                    })

console.log(outputString);

当我打印 outputString 的值时,它显示“未定义”

【问题讨论】:

  • 是否定义了keyvalue 是否返回了一些东西?检查if(err)
  • 值得一读:How to return the response from an asynchronous call?。这是关于 Javascript 和异步操作最常见的混淆点之一。
  • @jfriend00 好的。所以控件立即回到console.log。所以我看不到变量的修改值。所以不可能实现我想要做的事情。我的意思是在更新之前访问变量。但我认为如果我放一个计时器这会起作用。我在打印变量之前等待一段时间
  • 如果您阅读了您被标记为重复的问题的答案,它会为您提供多种选择。计时器是一个糟糕的选择,因为它假定它知道异步操作将花费多长时间。请阅读 dup 问题的答案。这一切都在那里拼写出来。异步操作需要异步编码技术。您不能将同步编码技术与异步操作一起使用。如果您要使用 Javascript 编写代码,则必须习惯这一点并学习如何正确使用。
  • @jfriend00 是的。再次感谢您的意见。

标签: javascript node.js callback redis asynccallback


【解决方案1】:

client.get() 立即返回,因此在调用最后一个 console.log() 时还没有设置 outputString。回调函数直到某个时间后才会被调用。

【讨论】:

  • 没有。这就是回调的目的。我在回调中设置变量的值,以便在控件脱离 client.get 方法之前对其进行修改
  • 好的。我想你是对的。让我再做一些分析,然后我会标记答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
相关资源
最近更新 更多