这是你如何在Promise中包装派遣?

时间:2018-05-17 03:25:25

标签: javascript reactjs promise es6-promise dispatcher

所以我有一段具有竞争条件的代码:

    //load token from async and put it in redux's state
    AsyncStorage.getItem('token').then((data) => {
        setTimeout(() => {
            if (data !== null) {
                store.dispatch({ type: t.LOGGED_IN, token: data });  //THIS
                this.setState({ isReady: true, isLoggedIn: true });  //RACING THIS
            }
            else {
                store.dispatch({ type: t.LOGGED_OUT });
                this.setState({ isReady: true, isLoggedIn: false })    
            }
        }, 5000)
    });

所以我做了一些关于如何将我的调度包装在一个承诺中的阅读,这样只有在调度完成后我才会在承诺的setState内调用.then

但是,我无法理解使用promise的resolve回调。它是否被称为whatevever我传入resolve然后当它完成它告诉promise对象它已被解决?或者它是说,一旦承诺得到解决,运行那段代码?前者对我更有意义所以我这样做是为了我的代码:

let promisedDispatch = (actionObj) => new Promise (function(resolve) { resolve(store.dispatch(actionObj)) });

    //load token from async and put it in redux's state
    AsyncStorage.getItem('token').then((data) => {
        setTimeout(() => {
            if (data !== null) {
                promisedDispatch({ type: t.LOGGED_IN, token: data })
                    .then(()=>this.setState({ isReady: true, isLoggedIn: true }))
            }
            else {
                store.dispatch({ type: t.LOGGED_OUT });
                this.setState({ isReady: true, isLoggedIn: false })    
            }
        }, 5000)
    });

现在在这种情况下,我真的解决了我的问题吗? 我无法确定,因为即使在此修改之前,竞争条件真的很少给我带来任何问题,因为dispatchsetState大致相同的时间,因此调度几乎总是先完成。

了解我的唯一方法是确认resolve(<x>)是否在说“嘿尝试解决然后让承诺知道什么时候完成”或者我的理解是完全错误的。

提前感谢您的信息! :)

0 个答案:

没有答案