我有这段代码可以验证档案是否未定义,但是通过这种方式,我只需要验证所有档案是否都未定义,就可以验证每个档案是否都未定义。
var render_archive1 = jQuery('#archive-pratica1')[0].files[0];
var render_archive2 = jQuery('#archive-pratica2')[0].files[0];
var render_archive3 = jQuery('#archive-pratica3')[0].files[0];
var render_archive4 = jQuery('#archive-pratica4')[0].files[0];
if (render_archive1 !== undefined && render_archive2 !== undefined && render_archive3 !== undefined && render_archive4 !== undefined) {
// wait till file gets encoded
Promise.all([getBase64(render_archive1), getBase64(render_archive2), getBase64(render_archive3), getBase64(render_archive4)]).then(([data, data1, data2, data3]) => {
// push file data
form.push({'name': 'archive_pratica1', 'value': data});
form.push({'name': 'archive_pratica2', 'value': data1});
form.push({'name': 'archive_pratica3', 'value': data2});
form.push({'name': 'archive_pratica4', 'value': data3});
// send request
jQuery.ajax ({
type: "POST",
data: {
action: 'sendEditInfo',
form: form
},
url: '../wp-admin/admin-ajax.php'
})
.then((res) => {
}, err => {
});
})
}
当未定义存档时,我无法发送ajax请求,因为ir在getBase64
函数中返回了错误。因此,我需要创建一个if来验证每个未定义的时间。
函数getBase64
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
答案 0 :(得分:2)
如果承诺没有定义,请不要拒绝
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => resolve({error:error});
});
}
然后测试结果是否有错误
if(!data.error)
form.push({'name': 'archive_pratica1', 'value': data});
答案 1 :(得分:2)
您可以执行此重构以存档此任务:
function readArchive(archiveId) {
var renderArchive = jQuery(`#${archiveId}`)[0].files[0];
if (renderArchive) {
return getBase64(renderArchive)
.then(data => ({ name: archiveId, data }));
}
return Promise.resolve(null);
}
Promise.all([
readArchive('archive-pratica1'),
readArchive('archive-pratica2'),
readArchive('archive-pratica3'),
readArchive('archive-pratica4'),
])
.then((archives) => {
archives
.filter(_ => _ !== null)
.forEach(_ => form.push({ 'name': _.name, 'value': _.data }));
// send request
jQuery.ajax({
type: "POST",
data: {
action: 'sendEditInfo',
form: form
},
url: '../wp-admin/admin-ajax.php'
})
})
.catch((err) => {
// do something
});
答案 2 :(得分:1)
如果您只想对未定义的请求,请尝试以下操作:
var promises = [];
for(var i = 1; i <= 4: i++) {
renderArchive = jQuery('#archive-pratica' + i)[0].files[0];
if (renderArchive !== undefined) {
var p = getBase64(renderArchive).then((data) => {
form.push({'name': 'archive_pratica' + i, 'value': data});
});
promises.push(p);
}
}
Promise.all(promises).then(() => {
jQuery.ajax ({
type: "POST",
data: {
action: 'sendEditInfo',
form: form
},
url: '../wp-admin/admin-ajax.php'
});
});