【发布时间】:2021-01-14 18:17:52
【问题描述】:
我一直遇到这个问题,我认为我的方法不是最好的,希望能得到一些帮助。
我有一个函数返回一个直到一段时间才可用的可观察对象(用户单击模式按钮、http 调用完成等)。假设我想显示一个确认模式,然后根据用户的选择继续或从函数返回。 (注意:模式返回一个承诺)
doWork = () => {
openConfirm().subsribe(res => {
if (!res) { return }; // return from function if user selects 'No'
// else proceed
});
}
这是我认为我使用 from 返回可观察到的错误的地方
openConfirm = (): Observable<any> => {
// ng bootstrap modal asking "Would you like to proceed" with a yes or no button
let modalRef = this.modalService.open(ConfirmModalComponent, {});
return from(modalRef.result.then(res => {
return true; // Yes button
}, () => {
return false; // No button
}));
}
}
我希望 observable 等到用户在模式上选择 yes 或 no 后再返回。就像我的情况一样。但是有更清洁的方法吗?如果我删除 from() 运算符并返回 of(true) 或 of(false) 我会收到一个错误,我无法订阅 undefined。
【问题讨论】:
-
defer()是您要找的吗? -
@martin 不完全是,有时我订阅了 observables 并且数据还没有准备好立即返回,就像在这个例子中的模态点击一样),我要么得到订阅错误,要么必须做使用这个丑陋的 from() 代码或 of() 如果它不是一个承诺。
标签: angular rxjs observable ng-bootstrap