2016-10-13 2 views
0

я рабочая OrderHistory модель:Реагировать Native: возвращает значение извлекалось AsyncStorage.getItem() в функции

import { AsyncStorage } from 'react-native'; 

const tokenKey = "orderHistory"; 

export default class OrderHistory extends Object { 
    static ordersPlaced() { 
    return AsyncStorage.getItem(tokenKey); 
    } 
} 

и в моем компоненте у меня есть это:

showConfirmOrderModal() { 
    alert("booya"); 
    } 

    onBuyButtonPress() { 
    OrderHistory.ordersPlaced().then((amount) => { 
     switch(amount) { 
     case null: 
      this.showConfirmOrderModal(); 
      break; 
     default: 
      this.addToCart(this.state.currentOrder); 
     } 
    }); 
    } 

Есть способ перемещения функции .then для решения обещания, возвращенного AsyncStorage.getItem() внутри модели OrderHistory? Я пытался что-то вроде этого, но это не сработало:

orderhistory:

export default class OrderHistory extends Object { 
    static async ordersPlaced() { 
    AsyncStorage.setItem("myKey", "My value here"); 
    return AsyncStorage.getItem("myKey").then((value) => value); 
    } 
} 

компонент:

onBuyButtonPress() { 
    let blah = OrderHistory.ordersPlaced(); 
    console.log(blah); 
    } 

Но что печатает Promise {_45: 0, _81: 0, _65: null, _54: null}

Что я делаю неправильно?

+0

Это еще асинхронный код, вы будете иметь дело с обещание и использовать '. then' для получения результатов. Вы можете взглянуть на предстоящую функцию async/await JS, если вы хотите, чтобы код выглядел синхронно, [здесь есть QA об этом в native-native] (http://stackoverflow.com/questions/34016685/how-to -use-ждать-ключ-слово-на-реагировать родной) –

ответ

0

AsyncStorage методы возвращают Promise, с которыми вам нужно обращаться. Для того, чтобы сделать его лучше и избавиться от .then обратного вызова ад, вы можете использовать async/await синтаксис, который до сих пор занимает Promise и «ЖДЕТ» его завершение:

static async ordersPlaced() { 
    await AsyncStorage.setItem("myKey", "My value here"); 
    const value = await AsyncStorage.getItem("myKey"); 
    //check your value, process it, etc. 
    return value; 
} 
Смежные вопросы