Javascript 当存档未定义时,不包括在承诺中
我有这段代码来验证归档文件是否未定义,但通过这种方式,我只验证是否所有归档文件都未定义,我想验证是否每个归档文件都未定义Javascript 当存档未定义时,不包括在承诺中,javascript,jquery,promise,Javascript,Jquery,Promise,我有这段代码来验证归档文件是否未定义,但通过这种方式,我只验证是否所有归档文件都未定义,我想验证是否每个归档文件都未定义 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_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来验证每个if是否未定义
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 => {
});
})
}
函数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);
});
}
如果只想对未定义的对象发出请求,请尝试以下操作: var承诺=[]; forvar i=1;我{ form.push{'name':'archive_pratica'+i,'value':data}; }; promises.pushp; } } Promise.allpromises.then=>{ jQuery.ajax { 类型:POST,, 数据:{ 操作:“sendEditInfo”, 表格:表格 }, url:“../wp admin/admin ajax.php” };
}; 如果只想对未定义的对象发出请求,请尝试以下操作: var承诺=[]; forvar i=1;我{ form.push{'name':'archive_pratica'+i,'value':data}; }; promises.pushp; } } Promise.allpromises.then=>{ jQuery.ajax { 类型:POST,, 数据:{ 操作:“sendEditInfo”, 表格:表格 }, url:“../wp admin/admin ajax.php” };
}; 如果你的承诺没有定义,不要拒绝
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});
如果你的承诺没有定义,不要拒绝
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});
您可以执行此重构以归档此任务:
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
});
您可以执行此重构以归档此任务:
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
});
getBase64是如何编写的?我编辑了这个问题这里有一个使用一致模式的较短版本:您想发送所有存档还是只发送未定义的存档?getBase64是如何编写的?我编辑了这个问题这里有一个使用一致模式的较短版本:您想发送所有存档还是只发送未定义的存档?