Выход без остановки потока в задаче параллелизма ember

#javascript #ember.js #yield #ember-concurrency

#javascript #ember.js #выход #ember-параллелизм

Вопрос:

 if (isEmpty(contact) || isEmpty(get(contact, 'emails'))) {
  contact = yield store.findRecord('contact', contactId);
}

if (isEmpty(contact) || isEmpty(get(contact, 'emails'))) {
  flashMessages.danger(i18n.t('email.cpq_document_email_missing'));
  return false;
}
  

Второй блок запускается, когда выполняется обещание, и я получаю сообщение об ошибке. Разве это не должно останавливать поток до тех пор, пока обещание не будет выполнено.

Обещание выполняется нормально, и оно работает в следующий раз

Комментарии:

1. Да, предполагая, что вы используете ember-data findRecord , должны вернуть обещание и ждать. Пожалуйста, включите весь код в свой компонент, а также ошибку, которую вы видите, потому что проблема, похоже, не в этом блоке.

Ответ №1:

Предполагая, что вы используете ember-data , вы можете столкнуться со случаем, когда findRecord возвращается кэшированная запись. Это зависит от того, загрузили ли вы уже запись (возможно, из предыдущего findRecord findAll или query по другому маршруту, и как ember-data настроен адаптер: shouldBackgroundReloadRecord и shouldBackgroundReloadAll являются ли методы на адаптере, которые по умолчанию возвращаются true . Когда эти методы возвращаются true , кэшированная запись немедленно возвращается, но записи снова извлекаются в «фоновом режиме».

Комментарии:

1. Это имеет смысл, у меня уже есть объект contact, но у него нет свойств электронной почты, поэтому я снова извлекаю его. Есть ли способ, которым я могу запретить ему использовать кэшированные данные?

2. Добавление { reload: true } исправило это, спасибо за разъяснение