ngx toastr在Angular 5服务的上传功能内不工作

ngx toastr在Angular 5服务的上传功能内不工作,angular,angular5,toastr,Angular,Angular5,Toastr,我在我的Angular 5项目中使用。我的项目中有一项服务,用于将文件上载到AWS bucket 问题是,我想在我的服务中使用Ngx toastr来通知文件是否已成功上载或存在错误,但它不起作用。有人能帮我吗 这是我的上传文件服务: 从'@angular/core'导入{Injectable}; 从“AWS sdk/global”导入*作为AWS; 从“aws sdk/clients/S3”导入*作为S3; 从“ngx微调器”导入{NgxSpinnerService}; 从“ngx-toastr

我在我的Angular 5项目中使用。我的项目中有一项服务,用于将文件上载到AWS bucket

问题是,我想在我的服务中使用Ngx toastr来通知文件是否已成功上载或存在错误,但它不起作用。有人能帮我吗

这是我的上传文件服务:

从'@angular/core'导入{Injectable};
从“AWS sdk/global”导入*作为AWS;
从“aws sdk/clients/S3”导入*作为S3;
从“ngx微调器”导入{NgxSpinnerService};
从“ngx-toastr”导入{ToastrService};
@可注射()
导出类UploadFileService{
文件夹='sample';
建造师(
私人微调器:NgxSpinnerService,
私人(toastr):ToastrService,,
) { }
上载文件(文件){
这个。_toastr.info(“上传”、“信息”);//这个很好用。
//this.spinner.show();
const bucket=new S3(
{
accessKeyId:'样本',
secretAccessKey:“示例”,
地区:'样本'
}
);
常量参数={
Bucket:'bucek_name',
Key:this.FOLDER+file.name,
正文:文件
};
bucket.upload(参数、函数(错误、数据){
如果(错误){
console.log('上载文件时出错:',错误);
//this.spinner.hide();
//这是一个错误(“文件上传失败,请再试一次!”,“错误”);
返回false;
}
console.log('已成功上载文件',data.Location);
localStorage.setItem('upload\u data\u path',data.Location);
//此操作成功(“文件上传失败,请重试!”,“成功”);
//不工作,导致找不到success属性的错误。
//this.spinner.hide();//不工作
返回true;
}
);
}
}

您正试图在
函数()中访问

函数使用自己的
this
创建自己的作用域,有效地覆盖(替换)了
UploadFileService
this


要解决这个问题,您可以使用函数,它不会在函数块中创建新的作用域:

bucket.upload(params, (err, data) => {
    ...
    this._toastr.success("File Upload Faild, Please Try Again!" , Success");
    ...
}

从我的角度来看,这与调用api无关,您正确地调用了ToastrService。是否可以在下面的Jeffrey的回答中创建一个示例。这就是问题的原因。也许你应该解释一下为什么会发生这种情况?(无论如何,向上投票)很有魅力。谢谢你,杰弗里。