Angular 角度2可观测下一个
我在试着理解可观察物的用途 在简单的情况下一切正常,但在一个情况下,我想压缩几个图像 我正在使用ng2 img工具 方法压缩图像。这会降低图像的质量 直到它适合作为maxSizeInMB给定的特定文件大小。设置 如果要忽略png的alpha通道,请将ignoreAlpha设置为true 尽管如此,还是要压缩图像(不推荐使用alpha 通道将丢失,生成的图像可能与 原始图像)返回每个给定文件的可观察值, onNext在一切按计划进行时接收一个文件,或者 错误对象,如果出现错误 在我的代码中,我正在执行以下操作:Angular 角度2可观测下一个,angular,observable,rxjs5,Angular,Observable,Rxjs5,我在试着理解可观察物的用途 在简单的情况下一切正常,但在一个情况下,我想压缩几个图像 我正在使用ng2 img工具 方法压缩图像。这会降低图像的质量 直到它适合作为maxSizeInMB给定的特定文件大小。设置 如果要忽略png的alpha通道,请将ignoreAlpha设置为true 尽管如此,还是要压缩图像(不推荐使用alpha 通道将丢失,生成的图像可能与 原始图像)返回每个给定文件的可观察值, onNext在一切按计划进行时接收一个文件,或者 错误对象,如果出现错误 在我的代码中,我正在
compressImages(filesToUpload:File[]):Observable<any> {
if (filesToUpload && filesToUpload.length > 0) {
return this.ng2ImgToolsService.compress(filesToUpload,GlobalService.MAX_FILE_SIZE_MB).map(response => {
console.log("response is");
console.log(response)
return response;
});
}
return Observable.of("no_image").map(response => "no_image");
}
this.imageService.compressImages(filesToUpload).flatMap(result => {
console.log(result)
return this.http.post(...);
}
).catch(UtilsService.handleError);
压缩图像(filesToUpload:File[]):可见{
如果(filesToUpload&&filesToUpload.length>0){
返回此.ng2ImgToolsService.compress(filesToUpload,GlobalService.MAX_FILE\u SIZE\u MB).map(响应=>{
控制台日志(“响应为”);
console.log(响应)
返回响应;
});
}
返回“无图像”映射的可观测值(响应=>无图像);
}
this.imageService.compressImages(filesToUpload.flatMap)(结果=>{
console.log(结果)
返回此.http.post(…);
}
).catch(UtilsService.handleError);
问题是result只返回1个文件,我知道我应该在某个地方使用
result.next()
,但我不知道如何使用。问题是您需要订阅该函数,而不是执行另一个映射。当您订阅一个observable时,您隐式地接收到onNext()
的值作为result
this.imageService.compressImages(filesToUpload).subscribe(
result => {
// this contains the value of onNext()
console.log(result)
return this.imageService.compressImages(filesToUpload).subscribe(
result => {
// this contains the value of onNext()
console.log(result)
return this.http.post(...);
}, error => {
// error
} this.http.post(...);
}, error => {
// error
}
编辑
如果您想收集流中的所有项目并将其作为一个列表进行操作,可以使用
toList()
如下所示:
this.imageService.compressImages(filesToUpload).toList().subscribe(
result => {
// this contains all values from the stream
console.log(result)
return this.http.post(...);
}, error => {
// error
}
谢谢你的回答,但是我如何“循环”所有的next()值呢?@DanyY它还没有为你循环吗?Subscribe在任何东西进入流时应用lambda函数,因此传递的函数将应用于每个onnextuu!!现在事情终于开始变得有意义了,我的情况并没有发生这种情况,因为当我收到一个结果时,我会直接发布到服务器上。但在另一个测试中,它的工作原理和你说的完全一样。有没有一种方法可以等待它们全部完成,然后发布到服务器上?谢谢,
toList()
给了我一个编译错误,因为函数的结果是“可观察的”,但我想到了,我会找到等效的。谢谢你的时间