Javascript 带承诺的返回函数值
我有一个函数ror将文件转换为base64以显示文件Javascript 带承诺的返回函数值,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个函数ror将文件转换为base64以显示文件 ConvertFileToAddress(event): string { let localAddress: any; const reader = new FileReader(); reader.readAsDataURL(event.target['files'][0]); reader.onload = (e) => { localAddress = e.target['re
ConvertFileToAddress(event): string {
let localAddress: any;
const reader = new FileReader();
reader.readAsDataURL(event.target['files'][0]);
reader.onload = (e) => {
localAddress = e.target['result'];
};
return localAddress;
}
不要使用这样的组件:
this.coverSrc=this.localization.ConvertFileToAddress(event);
但是当登录到控制台时,this.coverSrc
会显示未定义的
当我登录到此括号中时:
reader.onload = (e) => {
localAddress = e.target['result'];
};
它显示base64的值
,但当我在括号外记录本地地址
时,它会显示未定义
如何返回函数值并在其他组件中使用它?您可以通过承诺或回调来处理
--使用回拨
ConvertFileToAddress(event, callback): string {
const reader = new FileReader();
reader.readAsDataURL(event.target['files'][0]);
reader.onload = callback;
}
this.localization.ConvertFileToAddress(event, (e) => {
this.coverSrc = e.target['result'];
});
--使用承诺
ConvertFileToAddress(event): string {
return new Promise((resolve, reject) {
const reader = new FileReader();
reader.readAsDataURL(event.target['files'][0]);
reader.onload = (e) => {
resolve(e.target['result']);
};
});
}
this.localization.ConvertFileToAddress(event).then((data) => {
this.coverSrc = data;
});
你也可以让可观察性成为现实——你可以在这里检查样本——你可以通过承诺或回调来处理
--使用回拨
ConvertFileToAddress(event, callback): string {
const reader = new FileReader();
reader.readAsDataURL(event.target['files'][0]);
reader.onload = callback;
}
this.localization.ConvertFileToAddress(event, (e) => {
this.coverSrc = e.target['result'];
});
--使用承诺
ConvertFileToAddress(event): string {
return new Promise((resolve, reject) {
const reader = new FileReader();
reader.readAsDataURL(event.target['files'][0]);
reader.onload = (e) => {
resolve(e.target['result']);
};
});
}
this.localization.ConvertFileToAddress(event).then((data) => {
this.coverSrc = data;
});
您也可以制作可观察的-您在这里检查样本-您可以创建stackblitz演示来重现问题吗?您可以创建stackblitz演示来重现问题吗?