我目前正在管理具有此功能的代码

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>

10-06 04:26