【问题标题】:how to get the value from a Promise resolve?如何从 Promise 解析中获取价值?
【发布时间】:2020-04-30 21:56:42
【问题描述】:

我正在尝试读取用户上传的文件并将其转换为字符串。我有 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;
            }

我对@9​​87654325@ 和Promises 的概念相当陌生,并且明白promise 是我唯一可以等待的异步事物。我希望将上传文件的值(转换为字符串)存储在变量abcd 中。我如何获得价值?或者如果我必须返回一个承诺,那么我如何访问读取为字符串的文件的值并存储在abcd中?

【问题讨论】:

    标签: javascript typescript promise async-await


    【解决方案1】:

    您的 convertFileToString 看起来有点不对劲:您应该在 onload 处理程序中调用 resolve(),而不是反过来:

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

    【讨论】:

    • 这会产生以下错误:Property 'result' does not exist on type 'EventTarget'
    • @Terry 您的解决方案有效。我没有写resolve(event.target.result),而是写了这个:this.XMLAsString=fileReader.result as String; resolve(this.XMLAsString)非常感谢!!
    • @SamarthSaxena 然后使用(event.target as FileReader).result。或者只使用闭包:resolve(fileReader.result)
    • @SamarthSaxena 很高兴为您提供帮助 :)
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2020-11-02
    • 2020-02-05
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多