在Angular中Promise和Observable之间有什么区别?
每一个例子都有助于理解这两种情况。在什么情况下,我们可以使用每种情况?
在Angular中Promise和Observable之间有什么区别?
每一个例子都有助于理解这两种情况。在什么情况下,我们可以使用每种情况?
当前回答
许诺
Promise在异步操作完成或失败时处理单个事件。
注意:有Promise库支持取消,但ES6 Promise目前还没有。
可观察的
Observable就像一个流(在许多语言中),允许传递零个或多个事件,并为每个事件调用回调。
与Promise相比,Observable通常更受欢迎,因为它提供了Promise等特性。使用Observable,无论您想处理0、1或多个事件。您可以在每种情况下使用相同的API。
Observable也比Promise具有可取消的优势。如果不再需要对服务器的HTTP请求或其他昂贵的异步操作的结果,则Observable的Subscription允许取消订阅,而Promise最终将调用成功或失败回调,即使您不再需要通知或它提供的结果。
当Promise立即启动时,Observable只有在您订阅它时才会启动。这就是为什么Observable被称为lazy。
Observable提供了map、forEach、reduce等运算符。。。类似于阵列
还有一些强大的运算符,如retry()或replay()。。。这通常很方便。rxjs附带的操作员列表
惰性执行允许在通过订阅执行可观察到的操作之前建立一个运算符链,以进行更具声明性的编程。
其他回答
承诺:
提供单一的未来价值;不懒惰;不可撤销;
可观察:
随时间推移发出多个值;懒惰的可取消;支持map、filter、reduce和类似运算符
如果愿意,可以在Angular中调用HTTP时使用promise而不是observables。
Promise和Observables都帮助我们处理异步操作。当这些异步操作完成。Angular使用RxJS中的Observables而不是承诺来处理HTTP
以下是承诺和可观察性的一些重要区别。
在第一次阅读教程和文档时,我遇到了一个不明显的问题,那就是多播的想法。
确保您知道默认情况下,多个订阅将触发Observable中的多个执行。对单个HTTP调用的多个订阅Observable将触发多个相同的HTTP调用,除非您.share()(启用多播)。
一个承诺迫使你一次处理一件事,解开它的数据,处理异常,对async/await等很酷的事情有语言支持,否则就很简单了。
Observable有很多钟和哨子,但你需要了解你正在使用的力量,否则它可能被滥用。
Promise在异步操作完成或失败时处理单个事件。
承诺在应用程序中自动执行,而可观测则是惰性的。所以我们必须订阅可观测值以返回数据。
我们不能取消订阅承诺。与可取消订阅的Observables相比,它们每次都会执行。
我看到很多人认为Observable是“可取消的”,但将Promise设为“可取消”并不重要
函数cancelablePromise(主体){让决心,拒绝;const promise=新的promise((res,rej)=>{分辨率=res;拒绝=rej;正文(解析,拒绝)})promise.resolve=决议;promise.reject=拒绝;退货承诺}//示例1:过早拒绝承诺const p1=可取消承诺((resolve,reject)=>{setTimeout(()=>解析(“10”,100))})p1.then(value=>alert(value)).catch(err=>console.error(err))p1.拒绝(新错误('denid'))//控制台中出现错误//示例:过早地解决承诺const p2=可取消承诺((resolve,reject)=>{setTimeout(()=>解析('blop'),100)})p2.then(value=>alert(value)).catch(err=>console.error(err))p2.resolve(200)//预期警报为200