У меня проблема с Promises, я написал функцию, которая пытается получить данные из общих настроек, и как только я их получаю, я возвращаю Promise
.В используемой мной функции он возвращает Unhandled promise rejection cannot read the property then of undefined
Вот моя функция, которая получает данные из общих настроек и возвращает обещание
export function isMock(){
const returned = getSharedPreferenceValue( Globals.SHARED_PREFERENCES_KEY_IS_TEST_USER).then ((isTestUser) => {
consoleLog('isMock - ' + isTestUser);//THIS LINE WORKS
return Promise.resolve(isTestUser === 'true' ? true : false);
})
.catch(err => {
consoleLog('error -' + err);
return {error:err, response: null};
});
}
Вот функция, в которой я пытаюсьиспользуйте вышеуказанную функцию.
export function login ( abcd, xyz ){
const returned = isMock().then((isMock) => {
//Do some based on isMock.
console.log(`Login isMock - ` + isMock); //DOES NOT PRINT
})
.catch(error => {
console.log('Login isMock - error - ' + JSON.stringify(error));
});
}
Вот сообщение об ошибке
Possible Unhandled Promise Rejection (id: 0):
TypeError: Cannot read property 'then' of undefined
TypeError: Cannot read property 'then' of undefined
Не могли бы вы подсказать, где я иду не так.
Обновление
После получения ответа создание нового обещания решило проблему в этой функции, но ошибка исходила от другой.
Функция inMock, которая теперь исправлена
export function isMock(){
return new Promise((resolve, reject) => {
getSharedPreferenceValue(Globals.SHARED_PREFERENCES_KEY_IS_TEST_USER).then(isTestUser => {
consoleLog('isMock - ' + isTestUser);
resolve(isTestUser === 'true' ? true : false);
}).catch(err => {
consoleLog('error -' + err);
reject(err)
});
});
}
isMock вызывается здесь и выдает ошибкунаходится в другом операторе, который возвращает обещание
export function login ( ABCD, XYZ ){
const returned = isMock().then((isMock) => {
consoleLog('login Legacy API - isMock() - ' + isMock);//THIS WORKS
if(!isMock){
console.log('isMock is false');
}else{
consoleLog('mock data - ../mockData/login.json');
var user = require('../mockData/login.json');//WORKS
return Promise.resolve(user);//PROBLEM MIGHT BE HERE
}
})
.catch(error => {
console.log('Login isMock - error - ' + JSON.stringify(error));
});
}
Основная функция вызова входа в систему находится здесь, что дает мне ошибку
loginUser_legacy = async (ABCD, XYZ) => {
const returned = await login(cardDigits, nationalIdNumber).then((res) => {
consoleLog('res - ' + res);//DOES NOT WORK
});
}
Спасибо R