我正在努力解决我认为非常简单的jQuery承诺问题。实际上,我需要绕过'然后'在某个承诺链中的情况下,当先前的承诺发现它不会异步发射时。
我有一大堆代码(实际的,运行时代码太长了,不能在这里连贯地重新发布 - 事先道歉/ mea culpa),然后"然后"部分可以运行将异步触发的代码,或者将立即完成并返回 - 不执行异步执行。
***这已经解决了。在挖掘代码的过程中,我偶然发现了一个未在无文件条件下正确解析的承诺。这解决了这个问题。感谢@Bergi敏锐的目光,表示某些事情真的错误。
代码的总体结构是这样的:
****编辑以纠正对DisableProgress的错误调用**
customThing
问题是:当function writeData(){
EnableProgress('Starting upload')
.then(writeRecord)
.then(uploadFiles)
.then(DisableProgress);
}
function uploadFiles(){
var deferred = $.Deferred();
if (fileUploadList.length==0){
deferred.resolve();
} else {
//perform async upload
}
return deferred.promise();
}
检测到没有要上传的文件时(完全合法的情况),不会发生异步过程;承诺在退回之前就已经解决了,然后就是'调用' DisableProgress'永远不会开火。 (在这个链中实际上有其他的召唤被解雇但为了清楚起见而在这里被淘汰)
我想在uploadFiles例程中加入一个简短的setTimeout来强制"强制"没有文件要上传的事件中的异步执行,但这对我来说似乎是一个荒谬的黑客攻击。当然,我只是忽略了一个明显/更好的方式。我已经在谷歌搜索了关于在回归之前解决一个承诺的问题,但我还没有看到(或认可?)任何重点。我想我已经无法看到森林中的树木了 - 我让它太复杂了。我的错误是什么?