Musisz umieścić console.log (size.size); wewnątrz funkcji wywołania zwrotnego, ale myślę, że muszę wyjaśnić lepiej.
Musisz dowiedzieć się o połączeniach asynchronicznych i pętli zdarzeń Node.js. Node.js został stworzony, aby łączyć zasoby w lepszy sposób niż tworzenie wątków dla problemów, które są bardziej Intensywne IO (np. Serwery WWW) niż CPU Intensive. Pomysł polega na tym, że pojedynczy wątek dla logiki z nieblokującymi wywołaniami do korzystania z IO jest lepszy niż tworzenie wielu wątków i funkcji bloków wywołań do korzystania z IO.
Jeśli zaprogramować w innym języku, należy zapoznać się z sinchronous wersji swojego algorytmu:
var fs = require('fs'),
size = new Object();
function writeinfile(file) {
var stats = fs.statSync(path);
size = stats.size;
console.log(size);
};
writeinfile('error.log');
Jest to kod node.js, ale to nie jest sposób Node. Kiedy wywołasz statSync(), twój blok skryptu czeka na odczyt statystyk z dysku.
ALE, jeśli używasz tylko fs.stat()
, twój program będzie działał do końca kodu, GDY dysk odczytuje. Wszystkie następne linie zostaną uruchomione, zanim program osiągnie pętlę zdarzeń. Dopiero gdy statystyki będą gotowe, a program będzie działał do końca, pętla zdarzeń wywoła funkcję zwrotną, którą przekazujesz przez wywołanie fs.stat(callback)
.
W swoim kodzie wywołujesz stat (wersja asynchroniczna) i próbujesz użyć wartości, która nie jest jeszcze gotowa, ponieważ kod po wywołaniach asynchronicznych zawsze będzie uruchamiany przed wywołaniem wywołania zwrotnego.
Pierwsza wersja, którą myślę, działa właśnie dlatego, że powinieneś wpisywać kod ręcznie w tłumaczu, więc czas potrzebny do wpisania następnej linii jest wystarczający do osiągnięcia przez program pętli zdarzeń. W tym trybie, za każdym razem, gdy wpisujesz polecenie, naciśnij enter i ten kod zostanie uruchomiony, to znaczy otrzymasz zwrot, zdarzenia w pętli zdarzeń będą wywoływane po.
Chcę zapisać informacje w pliku, zmienić nazwę pliku, gdy osiągnie żądany rozmiar (za pomocą fs.rename) i zapisać informacje w nowym pliku za pomocą fs.write. Planuję uzyskać rozmiar pliku w zmiennej "rozmiar" użyj fs.stat i użyj jeśli (rozmiar <= 238084) (fs.rename (...)) else fs.write (....). – IIEIIEJI