#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 } исправило это, спасибо за разъяснение