Promise.all.then Не все пути кода возвращают значение - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть следующая функция, которую я хочу вернуть 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[];
    }
}

Во-первых, у меня есть функция ", в которой отсутствует оператор завершения, а тип возврата -не включает "undefined" "

А потом я добавил undefined (поэтому тип возвращаемого значения становится Promise <число [] | undefined> )

Но я получаю "не все пути кода возвращают значение" на этот раз.

Кажется, я не рассматриваю возможный путь кода с кодом ниже

Promise.all(...)
.then(val => {return ...})

Что мне не хватает?

Я тоже пробовал это

Promise.all(...)
.then(val => {return ...})
.catch(e => {return ...})

Но это не помогло

Примечание: Мой главныйЦель состоит в том, чтобы вернуть Обещание <номер []> , а не Обещание <номер [] |undefined>

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

вы должны вернуть Promise

return Promise.all(commentLines).then(...)
//....

или дождаться обещания и вернуть объект результата

let lines = await Promise.all(commentLines)
return [].concat(...lines)
0 голосов
/ 29 декабря 2018

Ваша ветвь с Promise.all никогда не выдает оператор return (value).Обратный вызов then делает, но не код вне обратного вызова then.

Вы, вероятно, хотите return результат Promise.all().then().

    return Promise.all(commentLines)
//  ^^^^^^
        .then(commitLines => {
            return Array.prototype.concat.apply([], commitLines);
        });
...