if语句中的函数仅在第一次未定义,但在休息时间函数调用也是如此
function in if statement got undefined in first time only but in rest time the function call as well
我试图在使用ng-upload之前检查文件扩展名,但在检查文件是否无错误的正常情况下,我试图添加我的函数。奇怪的事情发生了。第一次尝试上传时,我收到了这个错误:
ReferenceError: extension_check未定义在application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 76141在对象。forEach (application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 26353)在范围。美元范围。还是(application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 76140)$parseFunctionCall (application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js:38330)在更新(application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js:73683)在application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 73695在application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 42205在完成未完成请求(application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js:30920)在application-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 31300
但在其他时间函数也调用
代码:$scope.uploadFiles = function(files) {
$scope.files = files;
angular.forEach(files, function(file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0)
$scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 *
evt.loaded / evt.total));
});
}
console.log(file)
});
extension_check = function(name) {
extension_allow = ['jpg','jpeg','bmp','png'];
ext = name.substr(name.lastIndexOf('.')+1).toLowerCase();
console.log (ext);
flag = (extension_allow.indexOf(ext) > -1);
console.log (flag);
return flag;
}
}
因为第一次执行for循环时没有定义变量extension_check
。第二次使用extension_check
作为全局变量后,它将具有函数引用。
一种解决方案是将extension_check
的声明移动到循环上方,另一种解决方案是使用函数声明语法
$scope.uploadFiles = function (files) {
$scope.files = files;
angular.forEach(files, function (file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0) $scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
console.log(file)
});
function extension_check(name) {
var extension_allow = ['jpg', 'jpeg', 'bmp', 'png'];
var ext = name.substr(name.lastIndexOf('.') + 1).toLowerCase();
console.log(ext);
var flag = (extension_allow.indexOf(ext) > -1);
console.log(flag);
return flag;
}
}
您也可以在uploadFiles
之外定义函数,因为它不依赖于任何闭包变量
var extension_check = function extension_check(name) {
var extension_allow = ['jpg', 'jpeg', 'bmp', 'png'];
var ext = name.substr(name.lastIndexOf('.') + 1).toLowerCase();
console.log(ext);
var flag = (extension_allow.indexOf(ext) > -1);
console.log(flag);
return flag;
}
$scope.uploadFiles = function (files) {
$scope.files = files;
angular.forEach(files, function (file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0) $scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
console.log(file)
});
}
还要注意将变量设置为局部变量
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- setTimeout() 函数在超时持续时间之前调用
- 一段时间后调用函数,但只调用一次
- 查询日期时间选择器未在另一个函数调用中获取日期
- if语句中的函数仅在第一次未定义,但在休息时间函数调用也是如此
- 防止函数在同一时间被调用两次
- 结合_.记住和_.节流以限制函数调用,并在一个时间窗口内缓存结果
- 在JavaScriptHOWTO中,将未实例化的对象传递给不同类的构造函数调用,后者稍后在时间轴中实例化
- 计算两个函数调用之间经过的时间
- 图像加载时间和加载函数调用
- 将帮助程序函数调用到 Javascript 中具有时间间隔的函数
- 在循环中,在特定时间后调用函数
- 我的javaScript函数没有在正确的时间被调用
- 在不更改DOM的情况下,在指定的时间后调用函数