使用Promise将HTML5 FileReader的结果捕获到变量中

时间:2018-11-15 12:24:32

标签: javascript asynchronous promise base64 filereader

我有一个Angular 4应用程序,我在其中读取图像并试图将base64字符串传递给另一个变量-但是由于它的异步特性,我遇到了问题-image.src为空,因此该值已正确传递给图像对象?

ngAfterViewInit(): void {
    let image = new Image();
    var promise = this.getBase64(fileObject, this.processImage());
    promise.then(function(base64) {
        console.log(base64);    // outputs string e.g 'data:image/jpeg;base64,........'
    });

    image.src = base64; // how to get base64 string into image.src var here??          
}

/**
 * get base64 string from supplied file object
 */
public getBase64(file, onLoadCallback) {
    return new Promise(function(resolve, reject) {
        var reader = new FileReader();
        reader.onload = function() { resolve(reader.result); };
        reader.onerror = reject;
        reader.readAsDataURL(file);
    });
}

public processImage() {

}

1 个答案:

答案 0 :(得分:4)

您遇到的问题是base64是可变的,范围是.then()的回调函数。要使其正确,只需执行以下操作:

ngAfterViewInit(): void {
    let image = new Image();
    var promise = this.getBase64(fileObject, this.processImage());
    promise.then(function(base64) {    // base64 variable is scoped to this function only.
        console.log(base64);    // outputs string e.g 'data:image/jpeg;base64,........'

        image.src = base64;
    });
}