我正在尝试使用uploadFile方法从<input type="file"> HTML标记上传文件。
uploadFile promise解决了,但进度值小于100-它仍在上传中。所以我需要等到它完成,但是在第一个promise解决之后,我该如何继续更新FileUploadResult呢?
我的示例页面是here。
function UploadFile(curform, file) {
return new Promise((resolve, reject) => {
var FileUploadResult;
var check = function () {
if (FileUploadResult.isLast) {
resolve(FileUploadResult)
} else {
console.log(FileUploadResult);
setTimeout(check, 1000);
}
};
curform.uploadFile(file).then(Result => {
FileUploadResult = Result
check();
}).catch(er => { reject(er) })
})
}发布于 2017-08-13 23:01:21
不要在这里使用Promise。使用callbacks。正如文档中所写的:
uploadFile(file, [onSuccess], [onError]) ⇒ Promise。
发布于 2018-05-30 17:27:29
@simon-barnett,我遇到了同样的问题。除了uploadFile()调用之外,我正在做的其他事情都是使用promises和.then()语句。
curForm.uploadFile(file,uploadSuccess, uploadError);
function uploadSuccess(r) {
if (r.isLast) {
curForm.newRow()
.then(() => curForm.fieldUpdate("EXTFILENAME", r.file))
.then(() => curForm.saveRow(1)) //Save and Close curForm
}
}我认为发生的情况是,上传完成后,即使progress达到100,.isLast布尔值也没有正确更新。回调方法不会因此而挂起,它返回promise并正确设置.isLast布尔值。
我相信这是从1.5版开始的(尽管我现在在获取版本#时遇到了麻烦)。
更新:根据文档,从2.0.1版开始,删除了.isLast属性。从2.1.0版本开始,我们现在有了FileProgress和FileResult。这应该允许将.uploadFile作为promise调用,而不是通过回调,尽管我自己还没有测试过这一点。
https://stackoverflow.com/questions/45216456
复制相似问题