使用回调Angular 5在异步onload中获取变量

时间:2018-06-05 15:11:09

标签: javascript node.js angular asynchronous

我正在尝试上传图片并使用public JsonResult GetFYDetailsForDate(string date) { //input date = "6/13/2018" DateTimeStyles dateTimeStyles = DateTimeStyles.AssumeLocal; CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); var culturedDate1 = DateTime.ParseExact(date, "M/d/yyyy", new System.Globalization.CultureInfo("en-US")); var culturedDate = DateTime.Parse(date, culture, dateTimeStyles); } 返回src

FileReader

这会返回fileUpload(event) { var fr = new FileReader(); fr.onload = function() { getImgSrc(fr.result) } } getImgSrc(src) { console.log(src); }

但是,如果我Cannot find name 'getImgSrc',我会收到错误this.getImgSrc(fr.result),因为getImgSrc does not exist on type'MSBaseReader'的上下文。如何访问方法this以返回异步变量?

2 个答案:

答案 0 :(得分:2)

尝试使用ES6 lambda箭头语法来保留处理程序中this的上下文。

fileUpload(event) {
    var fr = new FileReader();
    fr.onload = () => this.getImgSrc(fr.result);    
  }

getImgSrc(src) {
  console.log(src);
}

如果没有记录任何内容,请尝试以下列方式从传递给result的活动中定位onload fileUpload(event) { var fr = new FileReader(); fr.onload = (event) => this.getImgSrc(event); } getImgSrc(event) { console.log(event.target.result); }

O(N)

希望这有帮助!

答案 1 :(得分:1)

使用非箭头功能(this时,您正在丢失上下文(function() { ... })。

由于getImgSrc是一种方法,而不是全局范围内的函数,因此您必须使用this调用它:

fr.onload = () => this.getImgSrc(fr.result);

如果onload通过了图片上传的结果,您可以使用:

fr.onload = result => this.getImgSrc(result);

如果你没有从问题中的代码中省略这一点,你也忘记使用其中一种读取方法实际开始阅读文件:

fr.readAsBinaryString(file)   // to get a string with bytes (0-255)
fr.readAsText(file, encoding) // to get a text string
fr.readAsDataURL(file)        // to get a DataURL
fr.readAsArrayBuffer(file)    // to get an ArrayBuffer object