我目前正在管理具有此功能的代码
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>'.
我想我必须返回正确的对象类型?我应该说我对承诺不太熟悉。
最佳答案
线路
.then(()=>{callanotherFunction()});
是个问题。由于匿名函数不返回任何内容(它只调用
callanotherFunction
),因此您的承诺已从返回SomeD
更改为返回void
,这是typescript向您指出的错误。正如你所说,解决的办法是归还正确的东西。在这种情况下,我认为你有两个选择。要么将承诺保存到一个变量,然后对其执行
.then
操作,然后返回原始值。或者您可以截取原始结果并将其转发到匿名函数中。以下是这两者的一个例子:
const prom = new Promise((resolve, reject) => {
this.getSomeD(somei).subscribe((someData: SomeD) => {
resolve(someData);
});
});
// Do your code when promise resolves, but return original:
prom.then(() => { callanotherFunction() });
return prom;
或者,直接转发结果:
return new Promise((resolve, reject) => {
this.getSomeD(somei).subscribe((someData: SomeD) => {
resolve(someData);
});
}).then(result => { callanotherFunction(); return result; }); // Forward the result
使用这两种方法之一,返回类型将保持为
Promise<SomeD>
。