1

以下は、Linux システムでファイル サイズを返すためのコードです。rhino を使用して JavaScript が実行されます。

次の関数を実行すると、値が返されます。

function fsize(file){
    var filesize = runCommand("stat","-c %s",file).output();
    return filesize;
} 

例えば:

fsize(testfile); 

ファイルサイズをバイト単位で返します

しかし、私が実行した場合:

var filesize = fsize(testfile);

出力しようとすると、varファイルサイズが「未定義」です

私は何を間違っていますか?

編集:私の出力機能:

function output(strings){
        print(strings);
}

編集:ここにシェル出力があります:

js> var file = "/var/www/javascript/ProgressMon/progressmon.js"

js> fsize(file);

683
js> var filesize = fsize(file);

683
js> output(filesize);

undefined

js> 
4

3 に答える 3

1

これを実行して、関数 runCommand の実行に失敗した場合に備えてチェックします

function fsize(file){
    try{
       return runCommand("stat","-c %s",file).output();
    catch(err) {
       alert('Error:'+ err);
       return -1;
    }
}

var filesize = fsize(testfile);

編集

これに基づい

構文はrunCommand(command, arg1, ..., argN, options)わかりません.output();

このようにしてみてください

var opt={err: ''}
runCommand("stat","-c %s",file, opt)

編集

電話する代わりにoutput(filesize);

直接呼び出すfilesize

やりたいことはこちら

js> var opt={output: ''}
js> runCommand("stat","-c %s",file, opt)
js> print(opt.output)
于 2012-05-09T22:08:56.653 に答える
0

問題は、何かを返すことを期待しているのに、関数に何かを返すように指示していないことです。

function output(strings){
    print(strings);
    //missing return
}

したがって、関数が をまったく実行しなかった場合は、return戻りundefinedます (これは、 を使用した場合にも発生しますreturn;) 。


また、この機能を使用するには、次のように変更する必要があると思います。

var filesize = runCommand("stat","-c %s",file).output();

var filesize = output(runCommand("stat","-c %s",file));
于 2012-05-09T23:44:17.797 に答える
0

これは推測ですが、Ajax経由でコマンドを実行しているようです。あなたがするなら:

var filesize = fsize(testfile);
alert(filesize);

undefinedサーバーからの応答をまだ待っている場合でも、Javascript はコードを続行し、次の行を実行します。

試してみることができるのは、タイムアウト、またはrunCommand()返された変数に警告するために完了したときにコールバックを追加することです。

繰り返しますが、これは推測にすぎませんが、Ajax と Javascript を扱っている場合は通常、これが当てはまります。

于 2012-05-09T22:08:42.057 に答える