我要返回以下功能 Promise <数字[]>
async fetchCommentLines(commitDict: CommitDict): Promise < number[] > {
if (GitCommentService.isLoggedIn()) {
const commentLines = Object.values(commitDict).map(async commit => {
// ...
// do the job and return number[]
// ...
return lineNums;
});
Promise.all(commentLines)
.then(commitLines => {
return Array.prototype.concat.apply([], commitLines);
});
} else {
return [] as number[];
}
}
首先,我得到“函数缺少结尾的return语句,并且返回类型不包含'undefined'”
然后我添加了 undefined (因此返回类型变为 Promise
但是我得到“这次并非所有代码路径都返回一个值” 。
似乎我没有考虑以下代码的可能路径
Promise.all(...)
.then(val => {return ...})
我缺少什么?
我也尝试过
Promise.all(...)
.then(val => {return ...})
.catch(e => {return ...})
但这没有帮助
注意:我的主要目的是返回 Promise <数字[]> ,而不是 Promise <数字[] |未定义>
答案 0 :(得分:2)
您应该返回Promise
return Promise.all(commentLines).then(...)
//....
或等待诺言并返回结果对象
let lines = await Promise.all(commentLines)
return [].concat(...lines)
答案 1 :(得分:1)
您的Promise.all
分支永远不会发出return (value)
语句。 then
回调确实起作用,但then
回调之外的代码则没有。
您可能想要return
的结果Promise.all().then()
。
return Promise.all(commentLines)
// ^^^^^^
.then(commitLines => {
return Array.prototype.concat.apply([], commitLines);
});