Объясните как правильно реализовать async/await

128
19 июля 2019, 18:50

Никак не могу понять что я делаю не так. Суть в том, что я пытаюсь скачать файл и разархивировать его. Использую axios и adm-zip.

class Preformnce {
  async download (source, zipFile) {
    console.log('start');
    const writer = fs.createWriteStream(zipFile);
    const response = await Axios({
      url: source,
      method: 'GET',
      responseType: 'stream'
    });
    response.data.pipe(writer);
    return new Promise((resolve, reject) => {
      writer.on('finish', resolve)
      writer.on('error', reject)
    });
  }
  async unzip (zipFile, extractEntryTo) {
    try {
      console.log('start unzip');
      const zip = new admZip(zipFile);
            zip.extractEntryTo(extractEntryTo, '.', true, true);
      console.log('finished unzip');
    } catch (error) {
        console.error(error);
    }
  }
}

async function test (val) {
  let preformnce = new Preformnce();
  try {
      await preformnce.download(source, zipFile, extractEntryTo)
       .then( res => {console.log('finish downloading');})
       .catch( error => {console.error(error); console.error(`Не удалось загрузить арххив ${source}`);})
      let unzip = preformnce.unzip(zipFile, extractEntryTo);
  } catch (error) {
      console.error(error);
  }
};

Проблема в том, что последовательность вроде срабатывает верно. Т.е. сначала идет сообщение начала загрузки 'start', затем сообщение об окончании 'end download', далее идет сообщение 'start unzip' и тут вываливается ошибка "Invalid or unsupported zip format. No END header found". При этом архив валидный! Если попробовать убрать блок скачивания и оставить только разархивирование, то все отрабатывает верно. Насколько я понял, проблема в том, что он пытается разархивировать недокаченый или недокопированный в конечную директорию архив. Пробовал множество комбинаций, но ничего не выходит...

READ ALSO
Как правильно указать AS в JOIN?

Как правильно указать AS в JOIN?

Каждый user в одноименной таблице имеет несколько адресов в таблице addressКак выбрать так чтобы поля в результате назывались user_id, name, address_1, address_2,

158
Запрос на выборку SQL

Запрос на выборку SQL

Всем привет! Есть следующая задача: "Получить дату максимальных продаж, если таких дат несколько, то самую раннюю из них"Я понимаю, как собрать...

179
ON CONFLICT в Postgresql

ON CONFLICT в Postgresql

отправляются 2 значения в базу

177
Почему не отображается цвет?

Почему не отображается цвет?

Шрифт поменялся на Arial, но цвет почему-то на веб-странице не отображаетсяКак это исправить? И ещё вопрос: как сделать так, чтобы в notepad++ подсвечивались...

141