как получить значение из решения Promise? - PullRequest
0 голосов
/ 14 января 2020

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

handleFileInput

handleFileInput(event){
  setTimeOut(async()=>{
   let abcd= await this.convertFileToString(this.file) //the file has been uloaded successFully at this point
   console.log(abcd) //this prints the enitre fn given in the resolve method
  },3000)
}

convertFileToString

convertFileToString(file){
  return new Promise((resolve, reject)=>{
      let fileReader = new FileReader();
      fileReader.readAsText(file);
      resolve(fileReader.onload = (event) =>{
        this.XMLAsString=fileReader.result as String 
      })
    })
}

Когда я печатаю значение abcd в консоли я получаю так:

ƒ (event) {
                _this.XMLAsString = fileReader.result;
            }

Я довольно новичок в концепции async/await и Promises и понимаю, что обещание - это единственная асинхронная вещь, которую я могу ждать. Я хочу, чтобы значение загруженного файла (преобразованное в строку) было сохранено в переменной abcd. как я могу получить значение? Или, если мне нужно вернуть обещание, то как мне получить доступ к значению файла, считанного как String, и сохранить его в abcd?

1 Ответ

2 голосов
/ 14 января 2020

Ваш convertFileToString выглядит немного неправильно: вы должны вызывать resolve() в обработчике onload, а не наоборот:

convertFileToString(file){
  return new Promise((resolve, reject)=>{
      let fileReader = new FileReader();
      fileReader.readAsText(file);
      fileReader.onload = (event) => {
          resolve(event.target.result);
      }
    })
}
...