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

javascript,函数返回一个值,但我不能将返回值赋给变量,javascript,rhino,Javascript,Rhino,下面是一些代码,为了在linux系统上返回文件大小,javascript使用rhino运行 运行以下函数将返回一个值: function fsize(file){ var filesize = runCommand("stat","-c %s",file).output(); return filesize; } e、 g: 返回以字节为单位的文件大小 但如果我跑步: var filesize = fsize(testfile); 当我尝试输出var filesize时,它

下面是一些代码,为了在linux系统上返回文件大小,javascript使用rhino运行

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

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

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

但如果我跑步:

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> 

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

var filesize = fsize(testfile);
alert(filesize);
它将是未定义的,因为Javascript将继续代码并执行下一行,即使它仍在等待服务器的响应

您可以尝试添加一个超时,或者在完成时向
runCommand()
添加一个回调,以警告返回的变量


同样,这只是一个猜测,但在处理Ajax和Javascript时通常都是这样。

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

var filesize = fsize(testfile);
alert(filesize);
它将是未定义的,因为Javascript将继续代码并执行下一行,即使它仍在等待服务器的响应

您可以尝试添加一个超时,或者在完成时向
runCommand()
添加一个回调,以警告返回的变量


同样,这只是一个猜测,但在处理Ajax和Javascript时通常都是这样。

执行此操作并检查函数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)
i不确定
.output()

试着这样做

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

而不是调用
输出(文件大小)

直接调用它
filesize

这是你想做的

js> var opt={output: ''}
js> runCommand("stat","-c %s",file, opt)
js> print(opt.output)

执行此操作并检查函数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)
i不确定
.output()

试着这样做

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

而不是调用
输出(文件大小)

直接调用它
filesize

这是你想做的

js> var opt={output: ''}
js> runCommand("stat","-c %s",file, opt)
js> print(opt.output)

问题是您希望返回某些内容,但从未告诉函数返回任何内容

function output(strings){
    print(strings);
    //missing return
}
因此,如果函数从未执行任何
返回
,它将返回
未定义的
(如果只使用
返回;
,也会发生这种情况)


此外,要使用此功能,我认为您需要更改:

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


问题是您希望返回某些内容,但从未告诉函数返回任何内容

function output(strings){
    print(strings);
    //missing return
}
因此,如果函数从未执行任何
返回
,它将返回
未定义的
(如果只使用
返回;
,也会发生这种情况)


此外,要使用此功能,我认为您需要更改:

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


请包括行为与预期不同的代码行(例如“输出”行)。使用
控制台.log
警报
,查看函数中的
var filesize
是否包含任何内容。在何处/何时调用执行
var filesize=fsize(testfile)以及您尝试在何处/何时输出
文件大小
?这里的背景很重要。没有它,我们只能猜测(我们不喜欢这样)。从我所看到的,
输出
函数调用的计算结果为
未定义
,但这不是问题,因为该函数不输出到控制台,而是输出到其他地方。。。如果要将变量“输出”到控制台,只需执行它(作为表达式)。因此,
输出功能输出到哪里?输出功能只是一个打印命令,我在其中创建了一个函数来更改名称。请包括行为与您预期不同的代码行(例如“输出”行)。使用
console.log
alert
查看函数中的
var filesize
是否包含任何内容。在何处/何时调用executing
var filesize=fsize(testfile)以及您尝试在何处/何时输出
文件大小
?这里的背景很重要。没有它,我们只能猜测(我们不喜欢这样)。从我所看到的,
输出
函数调用的计算结果为
未定义
,但这不是问题,因为该函数不输出到控制台,而是输出到其他地方。。。如果要将变量“输出”到控制台,只需执行它(作为表达式)。那么,
输出函数输出到哪里呢?输出函数只是一个打印命令,我在其中创建了一个函数来更改名称。谢谢你提供的信息,我实际上使用rhino来运行代码,请看我上面的shell输出。我添加了一些代码。我后来看到并实现了它。哦,好吧,谢谢你提供的信息,我实际上是在使用rhino来运行代码,看看我上面的shell输出,我后来看到并实现了它。虽然opt.output返回两次以字节为单位的文件大小,但这是可行的。。。不知道为什么,也不知道为什么它本来不起作用,谢谢你的帮助!!!虽然opt.output返回两次以字节为单位的文件大小,但仍然有效。。。不知道为什么,也不知道为什么它本来不起作用,谢谢你的帮助!!!