У меня функция React с MobX не работает в том порядке, который я ожидаю.Есть идеи? - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над проектом React и использую Mobx для магазинов.Я правильно работаю в магазине, сохраняю данные без проблем.Одна проблема, с которой я сталкиваюсь, это то, что я вызываю несколько функций, и кажется, что они выполняются задом наперед, и я не могу понять это.Я перечислю код ниже, если кто-то может взглянуть на него свежим взглядом и сказать мне, что мне не хватает.

Основной файл .js

componentDidMount(){
    const query = parse(location.search);
    if (query.slug !== undefined) {
        this.props.IftaStore.getTruck(query.slug);
        this.props.IftaStore.load();
    } else {
        this.props.IftaStore.setLimitByTruck(false);
        this.props.IftaStore.load();
    }
}

У меня в основном есть URL, чтобы получитьМеня зовут слизняк.Я анализирую, что затем, если он не неопределенный, я вызываю функцию getTruck в моем магазине (см. Ниже).После запуска getTruck должна быть вызвана функция load (также в магазине).Кажется, что происходит, что загрузка выполняется, затем getTruck.

код магазина:

getTruck = async user => {
    const thisConst = this;
    let endpoint = '/api/equipment/truck/?driver=' + user;
    let lookupOptions = {
        method: "GET",
        headers: {
            'Content-Type': 'application/json'
        }
    };
    let data = [];
    try {
        const response = await fetch(endpoint, lookupOptions);
        const data = await response.json();
        thisConst.trucknumber = data.results[0]["trucknumber"];
        thisConst.limit_by_truck = true;
    } catch (e) {
        console.log(e);
    }
    console.log("getTruck trucknumber: ", thisConst.trucknumber);


    if (data.count === 0) {
        alert("You are not assigned to a truck, please contact your Driver Manager")
    }
};

load = async nextEndpoint => {
    const thisConst = this;
    let data = [];
    let endpoint = '/api/dispatch/ifta_stand/';
    let lookupOptions = {
        method: "GET",
        headers: {
            'Content-Type': 'application/json'
        }
    };
    console.log("load truck number: ", thisConst.trucknumber);

    if (thisConst.limit_by_truck) {
        endpoint = '/api/dispatch/ifta_stand/?truck_number=' + thisConst.trucknumber;
    } else {
        endpoint = '/api/dispatch/ifta_stand/'
    }
    if (nextEndpoint !== undefined) {
        endpoint = nextEndpoint;
    }

    try {
        const response = await fetch(endpoint, lookupOptions);
        const data = await response.json();
        thisConst.ifta_stand = data.results;
        thisConst.next = data.next;
        thisConst.previous = data.previous;
        thisConst.count = data.count;
    } catch(e) {
        console.log(e);
    }

};

Когда я запускаю это приложение, журналы консоли выглядят так:

iftaStore.js:138 load truck number:  0
iftaStore.js:100 getTruck trucknumber:  24

это должно быть наоборот, номер грузовика getTruck должен регистрироваться перед номером грузовика.

Может кто-нибудь, пожалуйста, посмотрите на мой код и сообщите мне, что мне не хватает ...

Спасибо вам всем оченьмного для вашего времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...