javascript,函数返回一个值,但我不能将返回值赋给变量

时间:2012-05-09 22:01:56

标签: javascript rhino

以下是一些代码,要在linux系统上返回文件大小,javascript是使用rhino运行的。

运行以下函数会返回一个值:

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

e.g:

fsize(testfile); 

以字节为单位返回文件大小

但如果我跑:

var filesize = fsize(testfile);

当我尝试输出时,var filesize是“未定义的”

我做错了什么?

编辑:我的输出功能:

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

编辑:这是shell输出:

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

js> fsize(file);

683
js> var filesize = fsize(file);

683
js> output(filesize);

undefined

js> 

3 个答案:

答案 0 :(得分:1)

执行此操作并检查函数runCommand是否无法执行

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

var filesize = fsize(testfile);

修改

基于this

语法为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)

答案 1 :(得分:0)

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

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

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

您可以尝试执行的操作是在runCommand()完成时添加超时或回调以警告返回的变量。

同样,这只是一个猜测,但是当您处理Ajax和Javascript时通常就是这种情况。

答案 2 :(得分: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));