我正在执行以下代码。
var sum = 0;
var calculateSum = function(input) {
for(var i=0;i<input;i++) {
sum+=i;
}
console.log("Calculated sum for " + input);
return sum;
}
function calculateValue(data, callback) {
callback(data);
}
calculateValue(5000000,calculateSum);
while(sum<5) {
console.log("Still calculating sum!!!");
}
console.log("Calling third");
我希望输出为
拨打第三个
仍在计算总和
5000000的计算总和
但是,输出是
5000000的计算总和
拨打第三个
它与同步编程相同。请告诉我我做错了什么。
谢谢,
迪夫亚
答案 0 :(得分:1)
使用回调不会使代码异步,并且您必须了解Javascript是单线程的(大多数情况下),因此您的代码所做的是:
content : "\200C";
calculateValue
来电calculateValue
答案 1 :(得分:0)
您先致电calculateValue(5000000,calculateSum);
。唯一console.log()
位于console.log("Calculated sum for " + input);
。
因此,这将是调用此方法时记录的唯一内容,这也会将sum
更改为> 5
。
然后,您比较sum < 5
,但由于您之前的函数调用,sum
已经> 5
。
你调用的最后一件事是console.log("Calling third");
,所以人们会期望这是最后一件事。
答案 2 :(得分:0)
代码中的所有内容都是同步的。 Javascript逐行执行代码。这就是脚本执行将等待calculateSum函数完成执行,在其中打印日志语句然后移动到下一行的原因。由于(sum&lt; 5)条件为false,它直接打印最后一个console.log语句。这就是你的脚本运行的方式:
在calculateSum函数内部,循环遍历来自0的给定输入并记录第一个console.log语句,即
console.log(“+输入的计算总和”; 5.评估(总和&lt; 5),当总和值已经改变时返回false,所以跳过while循环。
记录最终的console.log语句,即
console.log(“Calling third”);
答案 3 :(得分:0)
输出似乎正确。它首先调用computedValue(),它打印“计算的5000000的总和”,因为sum是&gt; 5这样就跳过了while循环。然后记录最终消息。如果你想要并行编程或延迟编程。你可以使用Timer。
答案 4 :(得分:0)
谢谢你的回复。
我想我可能已经理解了Node JS的根本错误。如果我的理解错误,请向我纠正。
calculateValue(),while()和console.log()被视为三 单独执行。
因此,无论先完成哪一项都写入控制台。
由于calculateValue()需要一些时间才能完成,而()和 console.log()首先完成执行并写入控制台。
我创建了calculateValue()作为readFromDB()的替代品。所以,流程应该是
readFromDB(),while()和console.log()被视为三个 单独执行。
因此,无论先完成哪一项都写入控制台。
因为readFromDB()需要一些时间来完成,而()和 console.log()首先完成执行并写入控制台。
这不应该是Node JS的主要优势。即如果从DB读取需要很长时间,系统可以继续执行其他操作,如接受用户输入/执行不相关的计算。
谢谢, 迪夫亚