Я использую React с Typescript и имею эту функцию:
const saveData = (): Promise<any> => {
const promise = new Promise((s:any,f:any) => s(true))
if (true) {
promise.then(() => 5)
}
return promise
}
Затем я передаю его как свойство обработчика какому-то компоненту:
<Component save = {() => {saveData().then(a => console.info)}}
Это всегда регистрирует true, когда вместо этого следует регистрировать 5, почему? как мне эффективно связать эти обещания. что я здесь делаю не так?
Это пример codeandbox.io:
не получилось, все равно получаю true в console.info





then не изменяет обещание, на котором оно вызывается, оно возвращает новое обещание, которое вы игнорируете. Либо сохраните его обратно в promise, либо верните напрямую.
const saveData = (): Promise<any> => {
const promise = new Promise((s:any,f:any) => s(true))
if (true as boolean) { // as boolean to make ts not complain about unreachable code
return promise.then(() => 5)
}
return promise
}
Также рассмотрите возможность использования async/await с промисами, что значительно улучшит кодирование:
const saveData = async (): Promise<any> => {
await Promise.resolve();
if (Math.random() > 0.5) {
return 5
}
return 0;
}
Попробуйте
return promise.then(...)