具有多个处理程序的 Angular Promise

Posted

技术标签:

【中文标题】具有多个处理程序的 Angular Promise【英文标题】:Angular Promise with multiple handlers 【发布时间】:2017-08-05 05:37:27 【问题描述】:

是否可以在 Angular2 中为同一个 Promise 提供多个处理程序?例如,如果我正在设计一项服务并希望允许多个客户端订阅它并在 Promise 解决时收到通知?

注意,我不是在问如何从服务返回多个值,也不是在问如何链接 Promises。

【问题讨论】:

您只需在原始承诺上调用then,就像这样let p = new Promise(fn); p.then(callback1); p.then(callback2);。这不是链接,因为您要向原始承诺添加回调,而不是 then 返回的 @Maximus - 如果我不知道有多少回调?我假设我会将回调存储在一个数组中? 那么它有什么变化呢? let a = [fn1, fn2]; let p = new Promise(fn); a.forEach(fn => p.then(fn)); @Maximus - 同意,它没有。但是,有一个很大的限制。在回调内部,this 未定义,不再指代 Component 实例。假设我想做除console.log 结果之外的任何事情,我需要定义this 只是想知道,如果您使用它提供的解决方案,不接受我的回答的原因是什么? 【参考方案1】:

基本思想不是不对then返回的promise添加回调,而是将它们添加到原始promise中。类似的事情会做:

let a = [fn1, fn2]; 
let p = new Promise(fn); 
a.forEach(fn => p.then(fn));

【讨论】:

【参考方案2】:
let callbacks = [fn1, fn2 ...]
promise.then((resolvedValue) =>  
           callbacks.forEach(fn => fn(resolvedValue)); 
        

【讨论】:

以上是关于具有多个处理程序的 Angular Promise的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 1 应用程序在 Typescript 中管理 ES6/2015 Promise

在Angular 2中拒绝Promise时未处理的Promise拒绝[重复]

RxJS Observables 的 Promise.all 行为?

在 Angular 中,如何在使用 async/await 时处理 Promise 拒绝

Angular - 测试组件 - 从模拟返回 Promise.reject 时出错

AngularJS中的$http缓存以及处理多个$http请求