2016-01-11 71 views
1

我在nodejs的FS核心中的Sync功能有問題。 比如我有一個文件的NodeJS這個語法節點js FS accessSync設置全局變量路徑失敗

var y; 
fs.accessSync("real_exixs_path", fs.R_OK | fs.W_OK, function(err) { 
    if (err) { 
    console.log("File error!"); 
    } else { 
    y = "foo"; 
    } 
}); 

運行該代碼的全球「Y」變量仍然undefined後,它不會設置爲「富」。有人能幫我嗎?

+0

@thefourtheye這個問題是不能重複...... 我已經找到了解決辦法...的同步功能沒有回調參數! fs.access()的同步版本。如果任何可訪問性檢查失敗,則會拋出,否則不執行任何操作。 – r1si

+0

你爲什麼這麼認爲? – thefourtheye

+1

@thefourtheye我的問題詢問關於同步功能(Sync功能)而不是關於異步。 :) – r1si

回答

0

從FS的NodeJS文檔:

fs.accessSync(路徑[,模式])#

fs.access的同步版本()。如果任何可訪問性檢查失敗,則會拋出,否則不執行任何操作。

的accessSync功能沒有回調參數,所以你需要拋出

這裏一個例子:

try{ 
    fs.accessSync("real_exixs_path", fs.R_OK | fs.W_OK) 
}catch(e){ 
    //error 
} 
//success! 
6

接受的答案有錯誤,它會始終運行「成功」是否文件是否存在。

修正版本:

try{ 
    require('fs').accessSync("filename.ext", fs.R_OK | fs.W_OK) 
    //code to action if file exists 

}catch(e){ 
    //code to action if file does not exist 
} 

,或者在一個函數把它包:

function fileExists(filename){ 
    try{ 
    require('fs').accessSync(filename) 
    return true; 
    }catch(e){ 
    return false; 
    } 
} 
+0

這是爲什麼?因爲你使用了require('fs')'或其他東西? – LarsW

+0

您的問題是關於「接受的答案」中的錯誤是什麼?如果是這樣,錯誤是:「//成功!」代碼是在錯誤的地方 - 它會*總是*運行,無論文件是否存在。正確的行爲是「//成功!」只應該在文件實際存在的情況下執行...請參閱上面的示例代碼。 –

+0

當然可以。愚蠢的我。這似乎很明顯,我甚至沒有想到它,所以我認爲你的意思是別的東西(比如'fs.accessSync(「real_exixs_path」,fs.R_OK | fs.W_OK)'總是會導致一些奇怪的原因)。 – LarsW