typescript 如何在调用forEach时保持函数Promise〈MyObject[]>的返回类型?

tjvv9vkg  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(105)

我有一个函数search,它当前返回Promise<MyObject[]>

export function search(args: SearchInput) {
        return SomeInterface.performSearch(args)
            .then(xmlRequest => AnotherInterface.post(xmlRequest))
            .then(xmlResponse => SomeInterface.performSearchResponse(xmlResponse)) // performSearchResponse returns Promise<MyObject[]>
            .then(searchResponse => searchResponse.forEach(convertIDs)); // returns Promise<void>
    }

function convertIDs(obj: MyObject) {
    if (obj.id === 'foo') {
        obj.id = 'bar';
    }
    return obj;
}

我尝试在末尾添加一个新行,将convertIDs应用于函数的结果。但是在这样做时,函数不再返回Promise<MyObject[]>,而是返回Promise<void>。这反过来又将代码进一步分解到期望此函数的结果为Promise<MyObject[]>类型的行。
有没有一种方法可以将这个convertIDs函数应用到结果中,同时保持原始的返回类型?

sgtfey8w

sgtfey8w1#

使用逗号运算符取回原始值

.then(searchResponse =>
          ( searchResponse.forEach(convertIDs) , searchResponse )
       ); // returns the same Promise<MyObject[]> it got

(逗号运算符将删除除最后一个返回值以外的所有值)
那和

.then(searchResponse => {
    searchResponse.forEach(convertIDs) 
    return searchResponse 
  })

相关问题