具有多个处理程序的 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 拒绝