以下是一些代码,要在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>
答案 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));