асинхронный в карте с обратным вызовом не будет работать файл будет по-прежнему неопределенным

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

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: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch (). (отклонить ионный идентификатор: 1)

Всего 1 ответ


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

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

Поэтому ожидание его возвращаемого значения не имеет практического эффекта.

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


Есть идеи?

10000