Emberjs findRecord тогда не ждет разрешения

#ember.js #promise #ember-data #ember-model

#ember.js #обещание #ember-данные #ember-модель

Вопрос:

У меня есть метод findRecord с соглашением api json, который выглядит следующим образом:

 this.store.findRecord('book', 2).then((book) =>{
    console.log(book.get('name'));
});
  

Журнал консоли всегда печатается undefined , но значение имени фактически отправляется. book возвращает только id и ничего больше. Я тестировал с Ember. $ ajax, и я получил все. Структура модели также правильная.

Это нормальное поведение? Это сводит меня с ума в течение нескольких часов… Спасибо.

Редактировать:

Рабочий фрагмент:

 Ember.$.getJSON('http://api.xxxxx.com/v1/books/'   id).then((book) => {
    console.log(book.get('name'));
});
  

EDIT2:

Модель книги:

 import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
    name: attr('string'),
    year: attr('number'),
    authors: hasMany('author')
});
  

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

1. Можете ли вы поделиться фрагментом, т.е. Ember. $.ajax, с помощью которого вы получили все?

2. Да @skbly7, проверьте отредактированный вопрос

3. Можете ли вы опубликовать код в своей модели книги? Обычно это было бы in models/book.js .

4. Сделано @MaxWallace, проверьте ПРАВКУ2

Ответ №1:

Если передается { reload: true } или adapter.shouldReloadRecord принимает значение true, то возвращенное обещание разрешается, как только адаптер возвращает данные, независимо от того, есть ли запрошенная запись уже в хранилище:

 this.store.findRecord('book', 2, {reload: true}).then((book) =>{
    console.log(book.get('name'));
});
  

См.: https://emberjs.com/api/ember-data/2.16/classes/DS.Store/methods/findRecord?anchor=findRecord

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

1. Хорошо… это сработало. Что делает перезагрузка, равная true?

2. это заставит ждать, пока обещание не получит данные из серверной части. если эта перезагрузка не указана, она получит ее из хранилища и в фоновом режиме инициирует запрос сервера и обновит хранилище.

3. Значит, у меня есть эти книги, которые я вызываю по отдельности, уже в магазине? Если да, могут ли они быть загружены в хранилище, если я сначала выполню findRecord их родительского отношения? Например, я делаю findRecord для author, который загружается со всеми его книгами, а затем findRecord для конкретной книги

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

5. @rafaelmsantos Я приветствую вас, чтобы обновить ответ точным текстом, если мое объяснение неправильно передано..