Невозможно прочитать свойство 'then' из неопределенного с обещаниями - PullRequest
0 голосов
/ 20 ноября 2018

Привет, у меня есть функция, которая возвращает значение из общих настроек, но изначально она возвращает значение 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 Ответ

0 голосов
/ 20 ноября 2018

Попробуйте вернуть обещание:

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