यदि फ़ाइल या निर्देशिका मौजूद है, तो नोड , जेएस का उपयोग करके मैं कैसे सिंक्रोनाइज़ कर सकता हूं ?
exists
बस अनावश्यक कॉलबैक जोड़ता है।
यदि फ़ाइल या निर्देशिका मौजूद है, तो नोड , जेएस का उपयोग करके मैं कैसे सिंक्रोनाइज़ कर सकता हूं ?
exists
बस अनावश्यक कॉलबैक जोड़ता है।
जवाबों:
इस सवाल का जवाब पिछले कुछ वर्षों में बदल गया है। वर्तमान जवाब शीर्ष पर यहाँ है, कालानुक्रमिक क्रम में पिछले कुछ वर्षों में विभिन्न सवालों के जवाब के बाद:
आप उपयोग कर सकते हैं fs.existsSync()
:
const fs = require("fs"); // Or `import fs from "fs";` with ESM
if (fs.existsSync(path)) {
// Do something
}
इसे कई सालों तक हटा दिया गया था, लेकिन अब नहीं है। डॉक्स से:
ध्यान दें कि
fs.exists()
अपदस्थ है, लेकिनfs.existsSync()
नहीं है। (कॉलबैक पैरामीटरfs.exists()
अन्य Node.js कॉलबैक के साथ असंगत पैरामीटर को स्वीकार करता है। कॉलबैक काfs.existsSync()
उपयोग नहीं करता है।)
आपने विशेष रूप से एक सिंक्रोनस चेक के लिए कहा है , लेकिन यदि आप इसके बजाय एक एसिंक्रोनस चेक का उपयोग कर सकते हैं (आमतौर पर I / O के साथ सबसे अच्छा), fs.promises.access
यदि आप async
फ़ंक्शन का उपयोग कर रहे हैं या fs.access
(जब exists
से पदावनत किया गया है ) का उपयोग करें : यदि नहीं
एक async
समारोह में:
try {
await fs.promises.access("somefile");
// The check succeeded
} catch (error) {
// The check failed
}
या कॉलबैक के साथ:
fs.access("somefile", error => {
if (!error) {
// The check succeeded
} else {
// The check failed
}
});
यहाँ कालानुक्रमिक क्रम में ऐतिहासिक उत्तर दिए गए हैं:
stat
/ statSync
या lstat
/ lstatSync
) सेexists
/ existsSync
)exists
/ existsSync
, इसलिए हम शायद stat
/ statSync
या lstat
/ पर वापस आ गए हैं lstatSync
)fs.access(path, fs.F_OK, function(){})
/ है fs.accessSync(path, fs.F_OK)
, लेकिन ध्यान दें कि यदि फ़ाइल / निर्देशिका मौजूद नहीं है, तो यह एक त्रुटि है। यदि आप बिना खुलने के लिए अस्तित्व की जांच करने की आवश्यकता है तो डॉक्स fs.stat
का उपयोग करने की अनुशंसा करते हैं fs.access
)fs.exists()
अभी भी पदावनत है लेकिन fs.existsSync()
अब पदावनत नहीं किया गया है। तो आप अब इसे सुरक्षित रूप से उपयोग कर सकते हैं।आप उपयोग कर सकते हैं statSync
या lstatSync
( डॉक्स लिंक ) है, जो आप एक दे fs.Stats
वस्तु । सामान्य तौर पर, यदि किसी फ़ंक्शन का एक सिंक्रोनस संस्करण उपलब्ध है, तो उसके पास Sync
अंत में async संस्करण के समान नाम होगा। तो statSync
का तुल्यकालिक संस्करण है stat
; आदि lstatSync
का समकालिक संस्करण हैlstat
lstatSync
आप दोनों को बताता है कि क्या कुछ मौजूद है, और यदि ऐसा है, चाहे वह एक फ़ाइल या एक निर्देशिका है (या कुछ फ़ाइल सिस्टम में, एक प्रतीकात्मक लिंक, ब्लॉक डिवाइस, चरित्र डिवाइस, आदि), उदाहरण के लिए यदि आपको यह जानने की आवश्यकता है कि क्या यह मौजूद है और क्या है एक निर्देशिका:
var fs = require('fs');
try {
// Query the entry
stats = fs.lstatSync('/the/path');
// Is it a directory?
if (stats.isDirectory()) {
// Yes it is
}
}
catch (e) {
// ...
}
... और इसी तरह, अगर यह एक फ़ाइल है, तो वहाँ है isFile
; अगर यह एक ब्लॉक डिवाइस है, तो isBlockDevice
, आदि, आदि नोट try/catch
; यदि प्रविष्टि बिल्कुल मौजूद नहीं है, तो यह एक त्रुटि फेंकता है।
यदि आपको परवाह नहीं है कि प्रविष्टि क्या है और केवल यह जानना चाहते हैं कि क्या यह मौजूद है, तो आप उपयोगकर्ता द्वारा उपयोग किया जा सकता है path.existsSync
(या नवीनतम के साथ fs.existsSync
) , जैसा कि user618408 ने नोट किया है :
var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
// ...
}
इसके लिए किसी try/catch
चीज की आवश्यकता नहीं है, लेकिन आपको इस बात की कोई जानकारी नहीं है कि यह क्या चीज है, बस यही है। path.existsSync
बहुत पहले हटा दिया गया था।
साइड नोट: आपने स्पष्ट रूप से पूछा है कि कैसे तुल्यकालिक रूप से जांचना है , इसलिए मैंने xyzSync
उपरोक्त कार्यों के संस्करणों का उपयोग किया है। लेकिन जहां भी संभव हो, I / O के साथ, सिंक्रोनस कॉल से बचने के लिए वास्तव में सबसे अच्छा है। I / O सबसिस्टम में कॉल सीपीयू के दृष्टिकोण से महत्वपूर्ण समय लेते हैं। ध्यान दें कि इसके lstat
बजाय कॉल करना कितना आसान है lstatSync
:
// Is it a directory?
lstat('/the/path', function(err, stats) {
if (!err && stats.isDirectory()) {
// Yes it is
}
});
लेकिन अगर आपको तुल्यकालिक संस्करण की आवश्यकता है, तो यह वहां है।
कुछ साल पहले का नीचे का उत्तर अब थोड़ा पुराना है। वर्तमान तरीका fs.existsSync
फ़ाइल / निर्देशिका अस्तित्व के लिए एक तुल्यकालिक जांच करने के लिए उपयोग करना है (या fs.exists
एक अतुल्यकालिक चेक के लिए), इसके बजायpath
नीचे दिए गए संस्करणों के ।
उदाहरण:
var fs = require('fs');
if (fs.existsSync(path)) {
// Do something
}
// Or
fs.exists(path, function(exists) {
if (exists) {
// Do something
}
});
और यहां हम 2015 में हैं और नोड डॉक्स अब कहते हैं कि fs.existsSync
(औरfs.exists
) "पदावनत किया जाएगा"। (क्योंकि नोड के लोग सोचते हैं कि यह जांचने के लिए गूंगा है कि क्या इसे खोलने से पहले कुछ मौजूद है, जो यह है; लेकिन यह जाँचने का एकमात्र कारण नहीं है कि कुछ मौजूद है या नहीं!)
इसलिए हम शायद विभिन्न stat
तरीकों पर वापस लौट आए हैं ... जब तक / जब तक यह फिर से नहीं बदलता, तब तक।
न जाने कितने समय से वहाँ है, लेकिन वहाँ भी fs.access(path, fs.F_OK, ...)
/fs.accessSync(path, fs.F_OK)
। और कम से कम अक्टूबर 2016 तक, fs.stat
प्रलेखनfs.access
अस्तित्व चेक करने के लिए उपयोग करने की सिफारिश करता है ( "यह जांचने के लिए कि क्या कोई फाइल बिना इसके हेरफेर के मौजूद है, fs.access()
की सिफारिश की गई है।" )। लेकिन ध्यान दें कि उपलब्ध नहीं होने को एक त्रुटि माना जाता है , इसलिए यह संभवतः सबसे अच्छा होगा यदि आप फ़ाइल के सुलभ होने की उम्मीद कर रहे हैं:
var fs = require('fs');
try {
fs.accessSync(path, fs.F_OK);
// Do something
} catch (e) {
// It isn't accessible
}
// Or
fs.access(path, fs.F_OK, function(err) {
if (!err) {
// Do something
} else {
// It isn't accessible
}
});
आप उपयोग कर सकते हैं fs.existsSync()
:
if (fs.existsSync(path)) {
// Do something
}
इसे कई सालों तक हटा दिया गया था, लेकिन अब नहीं है। डॉक्स से:
ध्यान दें कि
fs.exists()
अपदस्थ है, लेकिनfs.existsSync()
नहीं है। (कॉलबैक पैरामीटरfs.exists()
अन्य Node.js कॉलबैक के साथ असंगत पैरामीटर को स्वीकार करता है। कॉलबैक काfs.existsSync()
उपयोग नहीं करता है।)
open
कॉल को जारी करना और अपवाद को संभालना या जो भी फ़ाइल नहीं थी , तो यह सबसे अच्छा है। मिल गया। आखिरकार, असली दुनिया अराजक है: यदि आप पहले जांच करते हैं और यह वहां है, तो इसका मतलब यह नहीं है कि जब आप इसे खोलने की कोशिश करेंगे तो यह अभी भी वहीं होगा; यदि आप पहले जांच करते हैं और यह नहीं है, तो इसका मतलब यह नहीं है कि यह एक पल बाद नहीं होगा। चीजों को समयबद्ध करना जैसे कि किनारे के मामलों की तरह लगता है, लेकिन वे हर समय सामने आते हैं । तो अगर आप खोलने जा रहे हैं, तो पहले चेक करने का कोई मतलब नहीं है।
स्रोत को देखते हुए, का एक तुल्यकालिक संस्करण है path.exists
- path.existsSync
। लगता है कि यह डॉक्स में छूट गया।
path.exists
और path.existsSync
अब पदावनत हो गए हैं । का उपयोग करें ।fs.exists
औरfs.existsSync
fs.exists
और पदावनत कर दिया गया है । उपयोग fs.stat () या fs.access () के बजाय।fs.existsSync
भी
का उपयोग करें fs.existsSync
। यह पदावनत नहीं है।
https://nodejs.org/api/fs.html#fs_fs_existssync_path
fs.existsSync
।
exists
फंक्शन को बदलने के लिए एक छोटी सी लाइब्रेरी लिखी :is-there
fs.exists
रूप में पदावनत है जबकि fs.existsSync
ऐसा नहीं है!
वर्तमान में अनुशंसित (2015 के अनुसार) एपीआई (नोड डॉक्स के अनुसार) का उपयोग करना, यही मैं करता हूं:
var fs = require('fs');
function fileExists(filePath)
{
try
{
return fs.statSync(filePath).isFile();
}
catch (err)
{
return false;
}
}
टिप्पणियों में @broadband द्वारा उठाए गए EPERM मुद्दे के जवाब में, यह एक अच्छी बात है। fileExists () शायद कई मामलों में इस बारे में सोचने का एक अच्छा तरीका नहीं है, क्योंकि fileExists () वास्तव में एक बेवकूफ रिटर्न का वादा नहीं कर सकता है। आप निश्चित रूप से यह निर्धारित करने में सक्षम हो सकते हैं कि फ़ाइल मौजूद है या मौजूद नहीं है, लेकिन आपको एक अनुमति त्रुटि भी मिल सकती है। अनुमतियाँ त्रुटि जरूरी नहीं है कि फ़ाइल मौजूद है, क्योंकि आप उस निर्देशिका की अनुमति नहीं दे सकते हैं जिसमें फ़ाइल आप देख रहे हैं। और निश्चित रूप से मौका है कि आप फ़ाइल अस्तित्व के लिए जाँच में कुछ अन्य त्रुटि का सामना कर सकते हैं।
तो मेरे ऊपर का कोड वास्तव में doesFileExistAndDoIHaveAccessToIt () है, लेकिन आपका प्रश्न doFileNotExistAndCouldICreateIt () हो सकता है, जो पूरी तरह से अलग तर्क होगा (जिसे अन्य बातों के अलावा EPERM त्रुटि के लिए खाते की आवश्यकता होगी)।
जबकि fs.existsSync उत्तर सीधे यहां पूछे गए प्रश्न को संबोधित करता है, जो अक्सर वह नहीं होता है जो आप चाहते हैं (आप केवल यह जानना नहीं चाहते हैं कि क्या "कुछ" एक पथ पर मौजूद है, तो आप शायद इस बात की परवाह करते हैं कि क्या "बात" है वह मौजूद है एक फ़ाइल या एक निर्देशिका)।
लब्बोलुआब यह है कि यदि आप यह देखने के लिए जाँच कर रहे हैं कि क्या कोई फ़ाइल मौजूद है, तो आप शायद ऐसा कर रहे हैं क्योंकि आप परिणाम के आधार पर कुछ कार्रवाई करने का इरादा रखते हैं, और उस तर्क (जाँच और / या बाद की कार्रवाई) को विचार को समायोजित करना चाहिए उस पथ पर पाई गई कोई फ़ाइल या निर्देशिका हो सकती है, और चेकिंग की प्रक्रिया में आप EPERM या अन्य त्रुटियों का सामना कर सकते हैं।
file.exists()
3% के लिए एक सरल उपयोग नहीं है और इसके बजाय हमें एक कोशिश में पकड़ने के लिए मजबूर करने के लिए? असली हो जाओ ... दिन की कुतिया।
एक और अपडेट
इस प्रश्न का उत्तर देने की आवश्यकता है, मैंने स्वयं नोड डॉक्स को देखा, ऐसा लगता है कि आपको fs.exist का उपयोग नहीं करना चाहिए , इसके बजाय यदि फ़ाइल मौजूद नहीं है, तो पता लगाने के लिए fs.open का उपयोग करें और आउटपुट की गई त्रुटि का उपयोग करें:
डॉक्स से:
fs.exists () एक एंकरोनिज़्म है और केवल ऐतिहासिक कारणों से मौजूद है। अपने कोड में इसका उपयोग करने का कोई कारण नहीं होना चाहिए।
विशेष रूप से, यदि फ़ाइल खोलने से पहले मौजूद है तो जाँच यह एक प्रतिमान है जो आपको दौड़ की स्थिति के लिए असुरक्षित बनाता है: एक और प्रक्रिया कॉल के बीच फ़ाइल को निकाल सकती है fs.exists () और fs.open ()। बस फ़ाइल खोलें और जब यह नहीं है तो त्रुटि को संभालें।
यदि फ़ाइल मौजूद है, तो मैं परीक्षण करने के लिए नीचे फ़ंक्शन का उपयोग करता हूं। यह अन्य अपवादों को भी पकड़ता है। इसलिए मामले में अधिकार के मुद्दे हैं जैसे chmod ugo-rwx filename
या विंडोज
Right Click -> Properties -> Security -> Advanced -> Permission entries: empty list ..
फ़ंक्शन रिटर्न अपवाद के रूप में यह चाहिए। फ़ाइल मौजूद है लेकिन हमारे पास इसे एक्सेस करने के अधिकार नहीं हैं। इस तरह के अपवादों को नजरअंदाज करना गलत होगा।
function fileExists(path) {
try {
return fs.statSync(path).isFile();
}
catch (e) {
if (e.code == 'ENOENT') { // no such file or directory. File really does not exist
console.log("File does not exist.");
return false;
}
console.log("Exception fs.statSync (" + path + "): " + e);
throw e; // something else went wrong, we don't have rights, ...
}
}
अपवाद आउटपुट, केस फ़ाइल में नोडज त्रुटि प्रलेखन मौजूद नहीं है:
{
[Error: ENOENT: no such file or directory, stat 'X:\\delsdfsdf.txt']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'X:\\delsdfsdf.txt'
}
अपवाद के मामले में हमारे पास फ़ाइल के अधिकार नहीं हैं, लेकिन मौजूद हैं:
{
[Error: EPERM: operation not permitted, stat 'X:\file.txt']
errno: -4048,
code: 'EPERM',
syscall: 'stat',
path: 'X:\\file.txt'
}
fs.exists () पदावनत है इसका उपयोग न करें https://nodejs.org/api/fs.html#fs_fs_exists_path_callback
आप इस पर इस्तेमाल किए गए मूल नोडज तरीके को लागू कर सकते हैं: https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86
function statPath(path) {
try {
return fs.statSync(path);
} catch (ex) {}
return false;
}
यह आँकड़े ऑब्जेक्ट वापस कर देगा, एक बार जब आप आँकड़े ऑब्जेक्ट आप कोशिश कर सकते हैं मिल गया है
var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
// do something
}
यहाँ कुछ उत्तर कहते हैं कि fs.exists
और fs.existsSync
दोनों पदावनत हैं। डॉक्स के अनुसार यह अधिक सही नहीं है। केवल fs.exists
अब ठीक किया गया है:
ध्यान दें कि fs.exists () पदावनत है, लेकिन fs.existsSync () नहीं है। (Fs.exists को कॉलबैक पैरामीटर () अन्य Node.js कॉलबैक के साथ असंगत हैं पैरामीटर स्वीकार करता है। fs.existsSync () कॉलबैक का उपयोग नहीं करता है।)
तो आप सुरक्षित रूप से fs.existsSync () का उपयोग कर सकते हैं कि फाइल मौजूद है या नहीं।
path
मॉड्यूल के एक तुल्यकालिक संस्करण प्रदान नहीं करता है path.exists
तो आप के साथ चारों ओर चाल करने के लिए है fs
मॉड्यूल।
सबसे तेज चीज जिसकी मैं कल्पना कर रहा हूं, वह उपयोग कर रहा है fs.realpathSync
जो एक त्रुटि को फेंक देगा जिसे आपको पकड़ना है, इसलिए आपको कोशिश / कैच के साथ अपना स्वयं का रैपर फ़ंक्शन बनाने की आवश्यकता है।
फ़ाइलसिस्टम (एफएस) परीक्षणों का उपयोग करने से त्रुटि ऑब्जेक्ट्स को ट्रिगर किया जाएगा, जिसे तब आपको कोशिश / कैच स्टेटमेंट में लपेटना होगा। अपने आप को कुछ प्रयास से बचाएं, और 0.4.x शाखा में एक सुविधा परिचय का उपयोग करें।
var path = require('path');
var dirs = ['one', 'two', 'three'];
dirs.map(function(dir) {
path.exists(dir, function(exists) {
var message = (exists) ? dir + ': is a directory' : dir + ': is not a directory';
console.log(message);
});
});
यदि आप फ़ाइल में हेरफेर नहीं करने जा रहे हैं तो fs.stat()
उपयोग करने के लिए दस्तावेज़ कहता है fs.access()
। इसने कोई औचित्य नहीं दिया, हो सकता है कि तेजी से या कम स्मृति उपयोग हो?
मैं रैखिक स्वचालन के लिए नोड का उपयोग करता हूं, इसलिए मैंने सोचा कि मैं फ़ाइल अस्तित्व के लिए परीक्षण करने के लिए उपयोग किए जाने वाले फ़ंक्शन को साझा करता हूं।
var fs = require("fs");
function exists(path){
//Remember file access time will slow your program.
try{
fs.accessSync(path);
} catch (err){
return false;
}
return true;
}
उन लोगों के लिए अपडेट किया गया asnwer 'सही ढंग से' यह इंगित करता है कि यह सीधे सवाल का जवाब नहीं देता है, अधिक एक वैकल्पिक विकल्प लाता है।
fs.existsSync('filePath')
यहां डॉक्स भी देखें ।
यदि मार्ग मौजूद है तो सही है, अन्यथा गलत है।
एक async संदर्भ में आप केवल await
कीवर्ड का उपयोग करके सिंक विधि में async संस्करण लिख सकते हैं। आप बस इस तरह एक वादा में async कॉलबैक विधि बदल सकते हैं:
function fileExists(path){
return new Promise((resolve, fail) => fs.access(path, fs.constants.F_OK,
(err, result) => err ? fail(err) : resolve(result))
//F_OK checks if file is visible, is default does no need to be specified.
}
async function doSomething() {
var exists = await fileExists('filePath');
if(exists){
console.log('file exists');
}
}
पहुँच पर डॉक्स ()।
function asyncFileExists(path) { //F_OK checks if file is visible, is default does no need to be specified. return new Promise(function (res, rej) { fs.access( path, fs.constants.F_OK, function (err) { err ? rej(err) : res(true); }, ); }); }
संभावना है, यदि आप जानना चाहते हैं कि क्या कोई फ़ाइल मौजूद है, तो आपको इसकी आवश्यकता होती है यदि यह करता है।
function getFile(path){
try{
return require(path);
}catch(e){
return false;
}
}
इसके लिए एक सरल आवरण समाधान यहां दिया गया है:
var fs = require('fs')
function getFileRealPath(s){
try {return fs.realpathSync(s);} catch(e){return false;}
}
उपयोग:
उदाहरण:
var realPath,pathToCheck='<your_dir_or_file>'
if( (realPath=getFileRealPath(pathToCheck)) === false){
console.log('file/dir not found: '+pathToCheck);
} else {
console.log('file/dir exists: '+realPath);
}
सुनिश्चित करें कि आप परीक्षण करने के लिए === ऑपरेटर का उपयोग करते हैं यदि रिटर्न गलत है। कोई तार्किक कारण नहीं है कि fs.realpathSync () उचित कार्य स्थितियों के तहत गलत वापस आ जाएगी इसलिए मुझे लगता है कि यह 100% काम करना चाहिए।
मैं एक ऐसा समाधान देखना पसंद करूंगा जिसमें त्रुटि उत्पन्न न हो और परिणामस्वरूप प्रदर्शन प्रभावित हो। एक एपीआई परिप्रेक्ष्य से, fs.exists () सबसे सुरुचिपूर्ण समाधान की तरह लगता है।
उत्तरों से यह प्रतीत होता है कि इसके लिए कोई आधिकारिक एपीआई समर्थन नहीं है (जैसा कि प्रत्यक्ष और स्पष्ट जांच में है)। कई उत्तर कहते हैं कि वे स्टेट का उपयोग करते हैं, हालांकि वे सख्त नहीं हैं। हम उदाहरण के लिए मान नहीं सकते हैं कि स्टेट द्वारा फेंकी गई किसी भी त्रुटि का मतलब है कि कुछ मौजूद नहीं है।
कहते हैं कि हम इसे किसी ऐसी चीज़ के साथ आज़माते हैं जो मौजूद नहीं है:
$ node -e 'require("fs").stat("god",err=>console.log(err))'
{ Error: ENOENT: no such file or directory, stat 'god' errno: -2, code: 'ENOENT', syscall: 'stat', path: 'god' }
आइए इसे किसी ऐसी चीज़ के साथ आज़माएँ जो हमारे पास मौजूद है लेकिन हमारे पास इसकी पहुँच नहीं है:
$ mkdir -p fsm/appendage && sudo chmod 0 fsm
$ node -e 'require("fs").stat("fsm/appendage",err=>console.log(err))'
{ Error: EACCES: permission denied, stat 'access/access' errno: -13, code: 'EACCES', syscall: 'stat', path: 'fsm/appendage' }
बहुत कम से कम आप चाहते हैं:
let dir_exists = async path => {
let stat;
try {
stat = await (new Promise(
(resolve, reject) => require('fs').stat(path,
(err, result) => err ? reject(err) : resolve(result))
));
}
catch(e) {
if(e.code === 'ENOENT') return false;
throw e;
}
if(!stat.isDirectory())
throw new Error('Not a directory.');
return true;
};
यह सवाल स्पष्ट नहीं है कि क्या आप वास्तव में इसे सिंक्रोनस बनाना चाहते हैं या यदि आप केवल यह लिखना चाहते हैं जैसे कि यह सिंक्रोनस है। यह उदाहरण प्रतीक्षा / async का उपयोग करता है, ताकि यह केवल समन्वित रूप से लिखा जाए, लेकिन asyncronously चलता है।
इसका मतलब है कि आपको इसे शीर्ष स्तर पर कॉल करना होगा:
(async () => {
try {
console.log(await dir_exists('god'));
console.log(await dir_exists('fsm/appendage'));
}
catch(e) {
console.log(e);
}
})();
एक विकल्प का उपयोग कर रहा है। यदि आप इसे और नीचे की जरूरत है तो async कॉल से वापस किए गए वादे पर .catch।
यदि आप जांचना चाहते हैं कि क्या कुछ मौजूद है तो यह एक अच्छा अभ्यास है यह सुनिश्चित करने के लिए कि यह एक निर्देशिका या फ़ाइल जैसी सही प्रकार की चीज़ है। यह उदाहरण में शामिल है। अगर इसे सिम्लिंक की अनुमति नहीं है, तो आपको स्टेट के बजाय स्टैट का उपयोग करना होगा क्योंकि स्टेट स्वचालित रूप से लिंक को पार कर जाएगा।
आप यहाँ कोड को सिंक करने के लिए सभी async को बदल सकते हैं और इसके बजाय statSync का उपयोग कर सकते हैं। हालाँकि, उम्मीद करते हैं कि एक बार async और वेट हो जाने के बाद सार्वभौमिक रूप से समर्थन करता है सिंक कॉल्स निरर्थक रूप से निरर्थक हो जाएंगे (अन्यथा आपको उन्हें हर जगह परिभाषित करना होगा और चेन को async के साथ ठीक उसी तरह व्यर्थ बनाना होगा)।