有条件地链接承诺不起作用

时间:2019-07-09 12:28:42

标签: reactjs typescript promise es6-promise

我正在使用带有Typescript的React并具有以下功能:

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,为什么?我如何有效地兑现这些承诺。我在这里做错了什么?

这是一个codeandbox.io示例:

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

1 个答案:

答案 0 :(得分:4)

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与promises一起使用,从而获得更好的编码体验:

const saveData = async (): Promise<any> => {
        await Promise.resolve();

        if (Math.random() > 0.5) {
            return 5
        }
        return 0;
}