【发布时间】:2016-01-17 22:15:43
【问题描述】:
我在 Node.js 中有一项服务,可以检索邮件服务器的电子邮件地址:
export interface IHasEmail {
email: string;
}
export interface IHasMailServer extends IHasEmail {
mailServers: Array<string>
}
export interface IMailServerService {
lookupMailServers( contact: IHasEmail ): RX.Observable<IHasMailServer>;
}
我有一组联系人 (IHasEmail),我想检索整个列表的邮件服务器。到目前为止,我有这个:
checkContacts( contacts: Array<contracts.IContact> ): void {
Rx.Observable.from(contacts).flatMap<contracts.IHasMailServer>( (contact) => {
return this._mailServerService.lookupMailServers( contact )
} ).subscribe(
(result) => this.handleResult(result),
(error) => this.handleError( error )
);
}
这可以正常工作,直到从对 lookupMailServer 的调用之一返回错误。此时,handleResults 不再返回任何结果。
我想记录错误但继续从其他联系人那里收到成功的结果。我该怎么做?
这个例子的代码可以在这里看到:
https://github.com/Roaders/contact-list-checker/tree/4dd0146449a4be6e703a9b60034231cc4c4bdea3
【问题讨论】:
-
您需要明确处理错误。创建一个新的 observable 来处理它,并将它映射到类似
{error: Error, result: IHasMailServer}的东西。然后使用这个 observable,通过error == null过滤它并进行日志记录。通过error != null过滤它,然后在你的信息流中做任何事情。
标签: node.js typescript rxjs