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

我只是在猜测,但看起来您正在通过 Ajax 运行命令。如果你要这样做:

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

就像 Javascript将undefined继续代码并执行下一行,即使它仍在等待来自服务器的响应。

您可以尝试做的是添加超时或回调runCommand()完成时提醒返回的变量。

同样,这只是一种猜测,但在处理 Ajax 和 Javascript 时通常会出现这种情况。

于 2012-05-09T22:08:42.057 回答
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 回答