我正在尝试编写一个“相对”通用的函数,用于一次点击文件上传操作,而不是使用jQuery文件上传插件。如果按顺序执行,所有单独的步骤都可以正常工作,但我遇到了麻烦,因为在用户选择要上传的文件之前,我的函数的其余部分都会执行。我非常感谢任何关于如何让我的JS等待我的用户的建议:
功能:
function filePost(ev) {
var anch = getAnchor(ev);
var form = document.querySelector(anch.dataset.form);
var fileInput = form.querySelector('input[type="file"]');
fileInput.click(); //<- CLICK EVENT I WANT TO WAIT FOR
var url = form.getAttribute('action');
var reloadTarget = anch.dataset.reload;
var data = new FormData(form);
var prom = fetch(url, {
method: form.getAttribute('method'),
credentials: 'same-origin',
body: data
}).then(function (resp) {
return resp.json();
}).then(function (response) {
if (response.is_valid) {
var html = response.html;
} else {
var html = response.err_msg;
}
document.querySelector(reloadTarget).innerHTML = html;
}).catch(function (err) {
console.log(err);
});
return prom;
}
发布于 2018-10-17 04:39:23
使用回调。就像使用.then
一样
如果fileInput.click()
不返回Promise
(不能与回调.then
链接),那么可以将click()包装在一个返回Promise
的函数中
希望能有所帮助
https://stackoverflow.com/questions/52843640
复制相似问题