Условные цепочки обещаний не работают - PullRequest
0 голосов
/ 09 июля 2019

Я использую 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.log)}}

Это всегда регистрирует true когда он должен войти 5 вместо этого, почему?как мне эффективно связать эти обещания.что я тут не так делаю?

Это пример codesandbox.io:

https://codesandbox.io/embed/practical-montalcini-5njyg

1 Ответ

4 голосов
/ 09 июля 2019

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;
}
...