【发布时间】:2018-03-28 01:06:56
【问题描述】:
我目前正在管理具有此功能的代码
public getData(somei: Somei): Promise<SomeD> {
return new Promise((resolve, reject) => {
this.getSomeD(somei).subscribe((someData: SomeD) => {
resolve(someData);
});
});
}
这很好用。我想在上面的代码执行后添加一个 then 来执行一个动作,但我似乎没有让它工作。 我试过了
public getData(somei: Somei): Promise<SomeD> {
return new Promise((resolve, reject) => {
this.getSomeD(somei).subscribe((someData: SomeD) => {
resolve(someData);
});
}).then(()=>{callanotherFunction()});
}
但我收到打字稿错误
Type 'Promise<void>' is not assignable to type 'Promise<SomeD>'.
我想我必须返回正确的对象类型?我应该说我对 Promise 不太熟悉。
【问题讨论】:
-
这很好用:不,它没有。如果可观察到的错误,那么您返回的承诺永远不会解决,但也永远不会出错。所以调用者无法知道发生了错误。这是一种反模式。使用 Observable.toPromise(),或者直接返回 Observable 而不是将其转换为 Promise。你必须学习 observables 才能有效地使用 Angular。所以现在是开始学习它们的最佳时机。你应该拥有的只是
return this.getSomeD(somei).pipe(tap(() => callanotherFunction())); -
我假设您的
callanotherFunction是一个 void 函数。我怀疑你只想返回你的新承诺。 -
您可能还想查找
await以及它与使用then回调的区别。 -
关于你对 Promise 不熟悉,我最近写了一个对一个有点不同的问题的答案,但你仍然可能会发现它很有用:stackoverflow.com/a/47413446/457268
标签: angular typescript promise