Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当存档未定义时,不包括在承诺中_Javascript_Jquery_Promise - Fatal编程技术网

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是如何编写的?我编辑了这个问题这里有一个使用一致模式的较短版本:您想发送所有存档还是只发送未定义的存档?