Angular 返回子订阅中可观察到的父级

Angular 返回子订阅中可观察到的父级,angular,typescript,rxjs,Angular,Typescript,Rxjs,我试图从另一个可观察对象的订阅中返回一个布尔值。但是,我无法使返回值冒泡到父方法 我意识到我正在订阅的上下文中返回,但是如何告诉canDeactive对话框.result.subscibe订阅已完成并且能够返回布尔值 canDeactivate(): Observable<boolean> | Promise<boolean> | boolean { const settings: DialogSettings = { title: 'Please

我试图
从另一个可观察对象的订阅中返回一个布尔值。但是,我无法使
返回值
冒泡到父方法

我意识到我正在订阅的上下文中返回,但是如何告诉
canDeactive
对话框.result.subscibe
订阅已完成并且能够返回布尔值

  canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
    const settings: DialogSettings = {
      title: 'Please confirm',
      content: 'Are you sure want to leave without saving your changes?',
      actions: [
        { text: 'No'},
        { text: 'Yes', primary: true }
      ]
    };

    if (!this.isSaved && this.updatedPositions.length) {
      // return confirm('Do you want to discard the changes?');



      const dialog: DialogRef = this.dialogService.open(settings);

      dialog.result.subscribe((result: DialogResult) => {

        if (!(result instanceof DialogCloseResult) && result['text'] === 'Yes') {
          console.log('action', result);
          console.log('returning false');
          return false;

        } else {
          console.log('dialog.close()');
          dialog.close();
          return true;
        }

      })

    } else {
      console.log('else');
      return true;
    }

  }
canDeactivate():可观察的|承诺|布尔值{
常量设置:对话框设置={
标题:“请确认”,
内容:“是否确实要在不保存更改的情况下离开?”,
行动:[
{文本:'否'},
{text:'Yes',primary:true}
]
};
如果(!this.isSaved&&this.updatedPositions.length){
//return confirm('是否放弃更改?');
const dialog:DialogRef=this.dialogService.open(设置);
dialog.result.subscribe((结果:DialogResult)=>{
如果(!(DialogCloseResult的结果实例)&&result['text']=='Yes'){
console.log('action',result);
log('返回false');
返回false;
}否则{
console.log('dialog.close()');
dialog.close();
返回true;
}
})
}否则{
console.log('else');
返回true;
}
}

对话框。结果
是一个异步调用。它类似于从回调返回,显然不能反映到main方法。实际上,您在通话的
true
部分没有返回任何内容

不要订阅更改,按原样返回可观察的。使用map转换数据

return dialog.result.map((result: DialogResult) => {

    if (!(result instanceof DialogCloseResult) && result['text'] === 'Yes') {
      console.log('action', result);
      console.log('returning false');
      return false;

    } else {
      console.log('dialog.close()');
      dialog.close();
      return true;
    }

  })
并保持一致性,在主要方面,在最底层。返回一个可观察到的

} else {
  console.log('else');
  return Observable.of(true);
}

dialog.result
是一个异步调用。它类似于从回调返回,显然不能反映到main方法。实际上,您在通话的
true
部分没有返回任何内容

不要订阅更改,按原样返回可观察的。使用map转换数据

return dialog.result.map((result: DialogResult) => {

    if (!(result instanceof DialogCloseResult) && result['text'] === 'Yes') {
      console.log('action', result);
      console.log('returning false');
      return false;

    } else {
      console.log('dialog.close()');
      dialog.close();
      return true;
    }

  })
并保持一致性,在主要方面,在最底层。返回一个可观察到的

} else {
  console.log('else');
  return Observable.of(true);
}