стать заметным из подписки - PullRequest
0 голосов
/ 31 мая 2018

После некоторых экспериментов я публикую код без изменений, чтобы найти лучший метод: у меня есть функция (в службе), которая подписывается на результат как BLOB и сохраняет его как содержимое файла в локальномфайловая система - FileSaver.saveAs (result,);:

printAsPDF()
{
   if (<some validator fails>)
   {
      return;
   } 
   let htmlContent = "<html><body>" + <some html content> +"</body></html>";
   //this.GetByteArrayForPDF returns Observable<any> (actually observable of a blob)
   this.GetByteArrayForPDF(htmlContent).subscribe(result => 
   {
      FileSaver.saveAs(result, <file name>); 
   }, error => console.log(error));
}

Теперь я хочу, чтобы функция printAsPDF также возвращала наблюдаемую информацию, указывающую, успешно ли выполнено действие сохранения или нет.В настоящее время вызов этой функции выполняется из компонента:

this.<service name>.printAsPDF();

Я хочу, чтобы функция компонента подписалась на наблюдаемое и проверила, успешно ли сохранено или нет.Как я могу сделать это, принимая во внимание, что вызов printAsPDF должен получить наблюдаемое (true) в зависимости от того, был ли FileSaver.saveAs (result,) вызван

1 Ответ

0 голосов
/ 31 мая 2018

Измените subscribe на map (вам, конечно, нужно подписаться на свой компонент, чтобы сделать наблюдаемое горячим).Вы можете переместить обработчик ошибок в свой компонент или поместить его в метод catch.

return this.GetByteArrayForPDF(htmlContent)
.map(result => 
{
   FileSaver.saveAs(result, <file name>); 
   return true;
})
.catch(error => { 
    console.log(error);
    return Observable.of(false);
});

или с использованием конвейерных операторов (RxJS 5.5 +):

import { catchError, map } from 'rxjs/operators';

return this.GetByteArrayForPDF(htmlContent).pipe(
map(result => 
{
   FileSaver.saveAs(result, <file name>); 
   return true;
}),
catchError(error => { 
    console.log(error);
    return Observable.of(false);
}));
...