Немного сложно дать конкретный ответ, не видя код магазина, но вам придется подождать, пока магазин закончит выборку данных, прежде чем пытаться прочитать их в вашей форме.
Возможносамый простой способ - использовать обещание, возвращенное fetchIncomeTaxRate
.Все actions
возвращают обещание при вызове, даже если вы сами его не возвращаете.Убедитесь, что вы возвращаете подходящее обещание, то есть такое, которое не разрешается до тех пор, пока данные не будут загружены.Если вы загружаете данные с помощью библиотеки, например axios, которая поддерживает Promises, это должно быть очень просто, вам просто нужно вернуть Promise, который он вам возвращает.
После того, как вы вернули подходящее Promise, выможет сделать что-то вроде этого:
this.fetchIncomeTaxRate(this.id).then(() => {
this.record.min_salary = this.getIncomeTaxRate.min_salary;
// ... others here
});
Возможно, вы захотите добавить дополнительный код, чтобы предотвратить просмотр / редактирование формы до заполнения соответствующих данных.
Альтернативой использованию Promises будетиспользовать watch
для ожидания изменения getIncomeTaxRate
.Однако было бы сложно гарантировать, что вы реагируете только на правильные изменения.
Обновление:
Теперь, когда вы опубликовали код своего магазина, я попробовалЯ сам запустил ваш код (настолько близко, насколько смог), и record
обновился нормально, если я использовал then
, как я описал выше.Скорее всего, это говорит о том, что есть другая проблема, которой нет в опубликованном вами коде.Например, может случиться так, что данные, возвращаемые с сервера, будут не в том формате, в котором вы ожидаете.
Для дальнейшей диагностики я предлагаю добавить некоторые записи в консоли.Я бы положил некоторые в верхнюю часть then
для начала:
this.fetchIncomeTaxRate(this.id).then(() => {
console.log('in then', this.getIncomeTaxRate, this.getIncomeTaxRate.min_salary);
this.record.min_salary = this.getIncomeTaxRate.min_salary;
// ... others here
});
Я бы также добавил некоторые в fetchIncomeTaxRate
тоже:
async fetchIncomeTaxRate({ commit }, id) {
console.log('called fetchIncomeTaxRate');
const response = await axios.get(
commonAPI.PAYROLL_BASE_URL + `/income-tax-rates/${id}`
);
commit("setIncomeTaxRate", response.data);
console.log('committed', response.data);
}
Не только должензарегистрированные значения будут правильными, но порядок сообщений журнала также важен.Данные должны быть зафиксированы до вызова then
.