Javascript 如何在pipe()之后将可观察到的转换为承诺

Javascript 如何在pipe()之后将可观察到的转换为承诺,javascript,angular,rxjs,ngrx,Javascript,Angular,Rxjs,Ngrx,我有一个异步函数来获取数据。为了操作返回的数据,我使用from()将承诺转换为可观察的,并使用pipe()操作数据。是否可以在pipe()之后将其转换回Promise()?我尝试了以下方法,但无效: getOrder(){ 从(asyncFunctionToGetOrder()返回 .管道(地图(数据)=> //在这里处理数据 返回数据; )) .toPromise();//这行不通 } 我不知道为什么要返回承诺,为什么在获取数据时不能转换为承诺,请参见以下内容: this.getOrder()

我有一个异步函数来获取数据。为了操作返回的数据,我使用
from()
将承诺转换为可观察的,并使用
pipe()
操作数据。是否可以在
pipe()之后将其转换回Promise()
?我尝试了以下方法,但无效:

getOrder(){
从(asyncFunctionToGetOrder()返回
.管道(地图(数据)=>
//在这里处理数据
返回数据;
))
.toPromise();//这行不通
}

我不知道为什么要返回承诺,为什么在获取数据时不能转换为承诺,请参见以下内容:

this.getOrder()
  .toPromise()
  .then((response:any) => {
    this.records = response;
  }).catch(error => {
     console.log(error)
  }).finally(() => {
    // code to cleanup
  });
不可观察:

getOrder() {
  return asyncFunctionToGetOrder().then(
    (data) => {
      // Processing data here
      return Promise.resolve(data);
    }
  );
}

不过,它应该会起作用

请记住,
toPromise
仅在可观察对象完成时返回。 此外,如果你的承诺被拒绝,你需要抓住错误

为您提供一个示例:

import{of,from}from'rxjs';
从“rxjs/operators”导入{map,catchError};
常量fetchCall=()=>{
返回承诺。解析({a:1,b:2});
}
常量problematicCall=()=>{
返回承诺。拒绝('错误')
}
const transformedPromise=from(fetchCall())
.pipe(映射(数据=>data.a))
.toPromise()
常量problematicTransformed=from(problematicCall())
.pipe(catchError(数据=>of(数据)))
.toPromise()
然后((a)=>console.log('Good boy',a));
然后((a)=>console.log('badboy',a));

也许这可以帮助您“这行不通”是什么意思?你有错误吗?如果你从promise开始,然后以promise结束,为什么不在
中进行数据处理呢?然后()
完全阻止并跳过可观察对象?@user3622260但是在
getOrder()
中分离数据检索器函数正是你所要做的,即使你使用
return asynchfunctiontogetorder()。然后(数据=>{/*在这里处理数据*/return data;})
来实现它。为什么你认为你不能使用
然后
?“看起来我无法将toPromise()链接到pipe()”-这是不正确的。
.pipe()
只是返回一个可观察的,所以
toPromise()
可以工作。我发现你的示例代码无效(错放了paren,缺少大括号),所以可能您看到的错误才是语法错误的真正原因。