asyn c в карте с обратным вызовом не будет работать файл будет по-прежнему неопределенным - PullRequest
0 голосов
/ 12 февраля 2020

Привет всем, у меня есть некоторые проблемы с моей функцией asyn c, тест будет неопределенным, что я делаю не так, мне нужна помощь с этим, это так расстраивает

async function fileToObj(jsonOfXls){
    const promises = jsonOfXls.Blad1.map(async x => {
      let test;
      await base64.encode(`pdfs/${x.E}`,  function (err, base64String) {
        test = base64String
      })
      return { gtin: x.D, gln: x.C, order: x.B, file: test }
    })
    const output = await Promise.all(promises)
   console.log(output)
}

Я пытаюсь сейчас это:

async function fileToObj(jsonOfXls) {
  const output = await Promise.all(
    jsonOfXls.Blad1.map(async x => {
      const file = await new Promise((resolve, reject) => {
        base64.encode(`pdfs/${x.E}`, function(err, base64String) {
          if (err != null) {
            return reject(err)
          }
          resolve(base64String)
        })
      })
      return { gtin: x.D, gln: x.C, order: x.B, file }
    })
  )
  console.log(output)
}

но я получаю эту ошибку:

72) UnhandledPromiseRejectionWarning: сбой кодирования (узел: 8772) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла из-за того, что внутри асинхронной функции c без блока catch возникла ошибка, или из-за отклонения обещания, которое не было обработано с помощью .catch (). (номер отклоненного иона: 1)

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете только с пользой ждать обещания.

base64.encode принимает обратный вызов, что подразумевает его не возвращает обещание.

Следовательно, ожидается его возвращаемое значение не имеет практического эффекта.

Вам нужно завернуть его в обещание , прежде чем вы сможете его дождаться.

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