0

我正在运行一段代码以使用 Priority-Web-SDK 将文件上传到 Priority。当一切都摆正时,它按预期工作。(上传文件,填写字段等)例如,当文件具有优先级不允许的扩展名时,uploadFile()按预期返回错误。但是,后续命令失败并显示以下消息:

A previous request has failed, causing all subsequent requests to fail

这样做的结果是,如果我有四个文件要上传,而第二个失败,我就无法上传接下来的两个。

这是导致我的问题的循环:

for (let file of files) {
    await baseForm.uploadFile(file, updateFileProgress)
        .then((u) => uploadResult = u)
        .then(() => baseForm.startSubForm(SUB_FORM))
        .then((r) => subForm = r)
        .then(() => subForm.newRow())
        .then(() => subForm.fieldUpdate("EXTFILENAME", uploadResult.file))
        .then(() => subForm.fieldUpdate("ORIG_FILENAME", file.name))
        .then(() => subForm.saveRow(1)) //Close subForm
        .catch((error) => {
            baseForm.startSubForm(SUB_FORM)
                .then((r) => subForm = r)
                .then(() => subForm.newRow())
                .then(() => subForm.fieldUpdate("ORIG_FILENAME", file.name))
                .then(() => subForm.fieldUpdate("INTERNAL_ERR", "Upload Error: " + file.name + " " +error.message))
                .then(() => subForm.saveRow(1)) //Close subForm
                .catch((error2) => {
                    uploadEnd(file.name + ": " + error2.message)
                })
        })
}

*等待保持上传顺序运行。
*uploadEnd()在成功或失败时关闭程序

有没有办法在不重新启动整个过程的情况下重置连接login()

4

1 回答 1

0

我正在回答我自己的问题,因为我能够在其他人介入之前找到解决方案......

这里有两件事同时发生,令人困惑。(我认为...)

1) 主catch()同步运行 2) 主catch()没有正确保存行或关闭子窗体。这是引发错误的问题,而不是我认为uploadFile()正确处理引发的错误的问题。

现在,事后看来,它们之间的联系似乎很紧密,解决同步性问题也可以解决第二个问题。但是,我也认为只打开一次子表单并关闭一次在语义和操作上更正确。移出baseForm.startSubForm(SUB_FORM)表单循环可以解决这个问题。

一旦我了解同步运行,添加另一个并且代码现在按预期工作catch()是一件简单的事情:asyncawait

.then(() => baseForm.startSubForm(SUB_FORM))
.then((r) => subForm = r)
.then(async () => {
    for (let file of files) {
        uploadFileStart(file);
        await subForm.uploadFile(file, updateFileProgress)
            .then((u) => uploadResult = u)
            .then(() => subForm.newRow())
            .then(() => subForm.fieldUpdate("EXTFILENAME", uploadResult.file))
            .then(() => subForm.fieldUpdate("ORIG_FILENAME", file.name))
            .then(() => subForm.saveRow()) //Do not close subForm
            .catch(async (error) => {
                await subForm.undo()
                    .then(() => subForm.newRow())
                    .then(() => subForm.fieldUpdate("ORIG_FILENAME", file.name))
                    .then(() => subForm.fieldUpdate("INTERNAL_ERR", "Upload Error: " + file.name + " " +error.message))
                    .then(() => subForm.saveRow())  //Do not close subForm
                    .catch((error2) => {
                        uploadEnd(file.name + ": " + error2.message)
                    })
            })
    }
})
.then(() => subForm.endCurrentForm())  //Close subForm

我将不胜感激任何有助于简化代码的评论。

于 2019-08-25T09:58:35.990 回答