我有一个for循环后跟一行代码(来自mocha的完成语句)。
是否会出现在循环完成之前执行done()的情况?对于像这样的场景,执行顺序如何在javascript中工作?
for (let i=0; result.length < i; i++) {
assert.equal(result[i].priority, 6);
}
done();
答案 0 :(得分:1)
如果您没有动态加载脚本或将它们标记为延迟或异步,则脚本将按照代码中遇到的顺序加载。它是外部脚本还是内联脚本无关紧要 - 它们按照代码中遇到的顺序执行。
答案 1 :(得分:1)
在循环“完成”之前永远不会调用完成。但是“完成”的定义在你的循环中看起来很奇怪。
for循环应该是
for(let i=0; i < result.length; i++){
assert.equal(result[i].priority, 6);
}
当你只使用result.length时,如果结果包含任何内容,它将完全跳过循环,因为正数是一个真值。
答案 2 :(得分:0)
作为POC https://jsfiddle.net/66ppporc/只是一个小小提琴
循环完成后,将始终调用done()
。
答案 3 :(得分:0)
如果你想在循环结束之前执行一个函数,你可以做这样的事情
for (let i=0; result.length; i++) {
assert.equal(result[i].priority, 6);
if(condition) {
break; // stops the loop
done(); // execute function here
}
continue; // continue the loop until it ends
}