代码之家  ›  专栏  ›  技术社区  ›  BRDroid

无法读取undefined with promises的属性“then”

  •  -1
  • BRDroid  · 技术社区  · 6 年前

    嗨,我有一个函数,它从共享的首选项中返回一个值,但最初它返回null/undefined是因为承诺或从共享首选项返回的数据,因为它最初没有任何内容。

    export function getSharedPreferenceValue( key ) {
        SInfo.getItem(key, {
            sharedPreferencesName: sharedPreferenceName,
                    keychainService: keyChainServiceName}).then(value => {
                        consoleLog('getSharedPreferenceValue - ' + key + ' - ' + value) //value 1
                        if( typeof value === 'undefined'){
                            return 'true';
                        }else{
                            return value;                    
                        }                    
                    });
    }
    

       whereShoulINavigateTo = async () => {
            const returned = await getSharedPreferenceValue( globals.SHARED_PREFERENCES_KEY_FIRST_LAUNCH).then ((isFirstLaunch) => {
                consoleLog('isFirstLaunch - ' + isFirstLaunch); 
                consoleLog('isFirstLaunch - ' + typeof isFirstLaunch); 
                //do something based on the value
            });
        }
    

    错误是

    TypeError: Cannot read property 'then' of undefined TypeError: Cannot read property 'then' of undefined

    我在这里哪里做错了

    1 回复  |  直到 6 年前
        1
  •  1
  •   Francisco    6 年前

    export function getSharedPreferenceValue(key) {
        dataObj = {
            sharedPreferenceName: sharedPreferenceName,
            keychainService: keyChainServiceName
        };
    
        return new Promise((res, rej) => {
            SInfo.getItem(key, dataObj).then(value => {
                console.log(`{key} {value}`);
                if (typeof value === 'undefined') {
                    res('true');
                } else {
                    rej(value)
                }
            });
        });
    }
    

    然后相应地修改第二个函数。

    whereShoulINavigateTo = async () => {
        getSharedPreferenceValue(globals.SHARED_PREFERENCES_KEY_FIRST_LAUNCH).then((isFirstLaunch) => {
            console.log(`{isFirstLaunch}`);
        }).catch((value) => {
            console.log('Failed');
        });
    }