我正在尝试使用函数的结果更新变量,因此可以在别处引用它,但它不会更新。
var total = 0;
mainQuery.count({
success: function (number) {
console.log("results",number);
total = number;
}
});
console.log("total is",total);
// console output:
// results 164
// total is 0
这样做的正确方法是什么?
答案 0 :(得分:4)
据我所知,您的mainQuery.count()
函数是异步的,并且一旦它结束运行就会运行success
回调。但是,在registring回调后调用console.log()
,但在成功函数结束运行后不调用console.log()
。你应该做的是在成功回调后运行var total = 0;
mainQuery.count({
success: function (number) {
console.log("results",number);
total = number;
myFn();
}
});
function myFn() {
console.log("total is",total);
}
:
{{1}}
答案 1 :(得分:4)
正如@Blazemonger所说,success
可能是一个异步函数。 console.log("total is",total);
的输出可能会在成功之前呈现,甚至会为total
分配值
答案 2 :(得分:1)
此代码应该以这种方式工作。 结账“关闭”这就是你在做什么。简而言之,闭包意味着您正在从另一个上下文中访问变量。
这基本上是一回事:
<script>
var test = 0;
setTimeout(function() { test = 10; }, 1000);
</script>
它有效。 ^^
您的问题可能是,在异步函数返回之前访问变量
答案 3 :(得分:1)
在不知道变量total
的整体范围的情况下,很难回答,但要涵盖所有基础,你可以做到这一点......
window.total = 0;
mainQuery.count({
success: function (number) {
console.log("results",number);
window.total = number;
}
});
console.log("total is", window.total);
答案 4 :(得分:1)
var total = 0;
mainQuery.count({
success: function (number) {
console.log("results",number);
total = number;
console.log("total is",total);
}
});
//The code you had here is executed before the async-call is done. So it hasnt updated total with the value yet.
// console output:
// results 164
// total is 0