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,缺少大括号),所以可能您看到的错误才是语法错误的真正原因。