вторая функция должна идеально улавливать эту ошибку и распространять ее
Нет, распространение по умолчанию. В идеале вам не нужно его вообще ловить, и он будет автоматически распространяться.
Я пробовал вещи, которые все приводят к необработанному обещанию. Каково мое (возможно, фундаментальное) недоразумение?
Вы используете Promise
антипаттерн конструктора ! С его помощью , вы должны позвонить .then(resolve, reject);
в catch
обработчике , чтобы заставить его работать. Или действительно new Promise
. Но это абсолютно не так, как это должно быть сделано.
Вместо этого снимите then
оболочку и просто верните результат then
обработчиков цепочки :
export function secondFunction(id: string): Promise<UserId> {
return thirdFunction(id)
.then((data: TableInfo) => {
if (Object.keys(data).length !== 3) {
throw new Error('data in database is not mapped properly');
}
return getUserId(data);
});
}
export function thirdFunction(id: string): Promise<TableInfo> {
let query = `/* query goes here */`;
return db.executeQuery(query, [id])
.then((data: TableInfo) => {
if (Object.keys(data).length < 1) {
throw new NoResultError('some message here');
}
return data;
});
}