Преобразуйте массив изображений в base64 с помощью readAsStringAsync в React Native

#javascript #react-native #async-await

Вопрос:

У меня есть следующий код:

 export const blSaveRecord = async (data) => {

  const params = new URLSearchParams()

  params.append('DocumentNumber', data.DocNumber)

  data.People.map((item, index) => {
     params.append(`Person[${index}].PersonDoc`, item.PersonDoc)
     params.append(
        `Person[${index}].Document[0].Base64File`,
        `data:image/jpg;base64,${FileSystem.readAsStringAsync(item.image, {
          encoding: FileSystem.EncodingType.Base64,
        })}`
     )
    })

    //THIS IS THE ISSUE:
    console.log(params)

    return axios
      .post(url_SaveRecord, params)
      .then(function (response) {
        return {
          status: true,
          message: '',
        }
      })
      .catch(function (error) {
        return {
          status: false,
          message: error.message,
        }
      })
  })
 

Проблема в том, что метод readAsStringAsync является асинхронным, но я не могу приступить к работе с await. Я попытался вызвать другую асинхронную функцию, чтобы создать этот метод и дождаться его, но это невозможно.

Вопрос в том… как я могу дождаться завершения асинхронной функции внутри карты? Я не хочу переходить к следующей итерации, пока асинхронность не будет завершена.

Спасибо.

Ответ №1:

Обещать.все асинхронные функции в обратном вызове карты проще реализовать:

пусть ответ=ожидание обещания.все(данные.Люди.карта((элемент, индекс)=>{

//Ваш код

}))

Комментарии:

1. Отличный ответ! Ты попал в точку! Большое спасибо!