arşiv tanımsız olduğunda vaadi dahil etmeyin

oy
1

Ben arşivleri tanımsız ise doğrulamak için bu kuralların var ama bu şekilde sadece TÜM arşivleri tanımsız ise, ben her biri tanımsız olup olmadığını doğrulamak istiyorum olun.

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 => {

        });
    })
}

Bir arşiv tanımsız edildiğinde ir bir hata verir, çünkü ben bir ajax isteği gönderemezsiniz getBase64fonksiyonu. Yani, her biri tanımsız olduğunda doğrulamak için eğer bir oluşturmanız gerekir.

fonksiyon 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);
  });
}
Oluştur 08/11/2018 saat 11:25
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
2

Bu görevi arşivlemek için bu Refactor yapabilirdi:

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
  });
Cevap 08/11/2018 saat 11:44
kaynak kullanıcı

oy
2

onlar tanımsız ise sözlerini reddetmek etmeyin

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});
  });
}

Sonuç hata varsa o zaman sınamak

 if(!data.error)
 form.push({'name': 'archive_pratica1', 'value': data});
Cevap 08/11/2018 saat 11:43
kaynak kullanıcı

oy
1

Sadece bu gibilerin değil tanımsız deneyin şey için istekte isterseniz:

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'
  });
});

Cevap 08/11/2018 saat 11:36
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more