【发布时间】:2021-06-06 08:53:17
【问题描述】:
我知道这个问题已经被问过很多次了,但奇怪的是其他帖子中的答案并没有解决我的问题:
handleFile(files) {
var f = files[0]
var dataSet = JSZip.loadAsync(f).then(function (zip) {
for (var filename in zip.files) {
const one_dicom_file = zip.files[filename]
console.log('--------- one_dicom_file ----------', one_dicom_file)
try {
one_dicom_file.async("arraybuffer").then(function (ArrayBuffer) {
var byteArray = new Uint8Array(ArrayBuffer);
var dataSet = dicomParser.parseDicom(byteArray);
console.log(filename, 'parsed dataSet: ', dataSet);
return dataSet
// EDIT: OP is Missing close curly bracket here!!
} catch (error) {
console.error(error);
}
console.log('check 1')
}
}, function (e) {
console.log(e)
});
}
我正在遍历一个 zip 文件的内容,当遇到第一个 dicom 文件(一种医学图像格式)时,我使用库调用 dicomParser.parseDicom() 对其进行分析。
成功执行此功能后,我想立即退出迭代。出于性能考虑,可以忽略其他 dicom 文件。
但是,上面的代码将为每个 dicom 文件打印console.log(filename, 'parsed dataSet: ', dataSet);。 return dataSet 行对 for 循环没有任何作用。此外,每个 dicom 文件都会打印check 1。
我也尝试将return dataSet 替换为break,在这种情况下会抛出错误Unsyntactic break。
其他答案声称 return 和 break 都应该停止 for 循环,但他们没有。
我对 javascript 很陌生,如果这是个愚蠢的问题,我很抱歉。我习惯了python,javascript语法太复杂了……
【问题讨论】:
-
你在 for 循环中既没有 break 也没有 return ... return 不在 for 循环中,它在 for 循环内调用的函数中,所以,对 for 循环没有任何作用 - 你的缩进隐藏了这个事实
-
说实话,您发布的代码在语法上并不正确 -
try在.then(function(ArrayBuffer){回调之外,而catch在其中 - 请发布以下代码语法正确 -
我编辑了缩进以明确 OP 缺少右括号
-
啊,我真傻....
-
您应该使用
async/await而不是.then()才能跳出循环(并首先按顺序进行迭代)
标签: javascript for-loop