Асинхронный вызов API для получения PDF возвращает пустой PDF - PullRequest
0 голосов
/ 28 августа 2018

Я могу вытащить заполненный PDF в Postman нормально, но мой код показывает только пустой PDF:

async function getWeeklyReport(queryString) {
  return new Promise((resolve, reject) => {
    request({
      url: 'https://reports.myApi.com/ReportCenter/Bookings',
      qs: queryString,
      headers: {
        'Content-Type': 'application/pdf',
        'Accept': 'application/pdf',
        'Authorization': 'Basic ' + new Buffer(process.env.apiEmail + ':' + process.env.apiPassword, 'utf8').toString('base64')
      }
    }, (error, response, body) => {
      if (error) {
        reject(error);
      } else {
        if (response.statusCode === 200) {
          resolve(body);
        } else if (response.statusCode === 409) {
          setTimeout(() => {
            resolve(getWeeklyReport(queryString));
          }, response.headers['Retry-After'] * 1000);
        } else {
          reject(response);
        }
      }
    });
  });
}

И вот где я это пишу:

async function saveCSVLocally(path, obj) {
  return new Promise((resolve, reject) => {
    fs.writeFile(path, obj, 'utf8', function (err) {
      if (err) {
        console.log('Some error occured - file either not saved or corrupted file saved.');
        console.log(err);
      } else{
        console.log('File saved locally');
      }
    });
  })
}

Я пробовал звонить несколькими способами, но ни одна из них не работает:

const report = await getWeeklyReport(queryString);
//saveFileLocally(localPath, report);//.then(emailSender.sendNewEmail());
//fs.writeFileSync("test.pdf", report,'binary');

Так как мне правильно вытащить этот pdf? Спасибо!

1 Ответ

0 голосов
/ 28 августа 2018

Убедитесь, что вы вызываете функции resolve() и reject() обещания, чтобы выполнить обещание:

function saveCSVLocally(path, data) {
  return new Promise((resolve, reject) => {
    fs.writeFile(path, data, 'utf8', function (err) {
      if (err) {
        console.log('Some error occured - file either not saved or corrupted file saved.');
        reject(err);
     } else {
        console.log('File saved locally');
        resolve();
      }
    });
  })
}

Также: помните, что вторым параметром fs.writeFile() является строка (не объект), хотя технически он может принимать буфер, который оказывается единым целым. Я бы лично использовал переменную data, чтобы избежать путаницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...