我有一个函数 upload_image 从表单上传文件并返回代表 ajax 请求的承诺。但是,用户可能尚未在该表单上选择文件,在这种情况下,我无法返回承诺,因为不会有 ajax 请求。但是,调用upload_image 的代码需要返回一个ajax 请求的promise,所以done() 和fail() 函数假定ajax 请求完成或失败。所以问题是,如果用户已经选择文件的前提条件失败,upload_image 应该返回什么?
换句话说,处理可能由于不同原因而失败的失败承诺的最佳实践是什么?
我考虑返回一个已经失败的承诺,并带有一个字符串“请选择一个文件”,然后在失败函数中检查它,但这似乎很hacky。我还考虑将验证和 ajax 提交拆分为两个不同的函数,但对于这么小的功能来说,这似乎开销太大。
upload_image().done(function(){
// image uploaded succesfully
}).fail(function(jqxhr){
// error uploading OR image was not selected - what's the best way to handle this?
});
// pseudocode
function upload_image() {
if (!user_has_selected_a_file) {
// what to do here? maybe:
// return new $.Deferred().reject('Please select a file');
} else {
return $.ajax();
}
}