В каком порядке отображаются операторы журнала в вашей консоли?
Я не в node.js, но я ожидаю увидеть "Out" перед "inter", потому что я догадываюсьфункция fs.readdir()
является асинхронной, и что предоставляемая ей функция обратного вызова не будет выполняться до тех пор, пока вы уже не вызовете setTimeout()
в последней строке вашего кода, в которой точка temp
еще не былабыл изменен.
То есть последовательность выполнения, которую я ожидаю от вашего кода:
- определить
fs
- определить
temp
установить в ???
- определить
test
функцию - определить
pr
функцию - вызов
test()
функцию - в пределах
test()
вызов fs.readdir()
но затем немедленно возвращаются из test()
без выполнения обратного вызова setTimeout(pr,1000,"Out setTimeout print: "+temp);
(где значение temp
в тот момент - все еще "???") становится частью строки, которая setTimeoutв одну секунду перейдет к pr
) - обратный вызов от
fs.readdir()
выполняется, и только тогда temp
изменяется.Время ожидания "inter" устанавливается.