Данные отображаются в ответе веб-сокета, но не в разрешенном обещании - PullRequest
0 голосов
/ 12 мая 2018

Я использую Nuxt + Express / Feathers для создания приложения, при этом они взаимодействуют через соединение socket.io. Используя перо-vuex, я могу легко отправлять запросы от моего клиента к бэкэнду, и ответы прекрасно возвращаются на вкладке сети инспектора chrome, но в разрешенном обещании в моем коде каждый возвращаемый объект равен undefined.

Запрос Websocket:

4235["find", "journals", {}]

Ответ Websocket:

4335[null, {total: 3, limit: 10, skip: 0,…}]
0: null
1: {total: 3, limit: 10, skip: 0,…}
  data: [{_id: "5af62077f2389a7490be22d6"}, {_id: "5af62094f2389a7490be22d7", some: "data"},…]
    0: {_id: "5af62077f2389a7490be22d6"}
    1: {_id: "5af62094f2389a7490be22d7", some: "data"}
    2: {_id: "5af66b3ae8c629789f35ead3", name: "john", surname: "doe"}
  limit: 10
  skip: 0
  total: 3

А вот как results выглядит в отладчике:

{total: 3, limit: 10, skip: 0, data: Array(3)}
  data: Array(3)
    0: undefined
    1: undefined
    2: undefined
    length: 3
    __proto__: Array(0)
  limit: 10
  skip: 0
  total: 3
  __proto__:
    ...

Это раздел моей страницы Nuxt, где я делаю запрос:

<template>
  <h1>{{journals}}</h1>
  <button class="btn btn-primary" @click="findThoseJournals()">
    Search Journals
  </button>
</template>

<script>
import { mapActions } from 'vuex';
export default {
  data () {
    return {
      journals: []
    }
  },
  methods: {
    ...mapActions('journals', {
      findJournals: 'find'
    }),
    findThoseJournals() {
      this.findJournals({query: {}}).then((results) => {
        debugger;
        this.journals = results.data;
      });
    }
  },
}
</script>

И для записи, при визуализации, results.data выглядит как [ноль, ноль, ноль].

Я полностью растерян относительно того, что вызывает это поведение. Почему метаданные переносятся, а сами данные не переносятся (но все равно количество записей )? Что происходит между откликом фрейма веб-сокета и обещанием, которое вызывает именно исчезновение данных?

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Не видя вашего кода для действия findJournals в вашем магазине Vuex, я могу только представить, что вы не возвращаете Обещание внутри действия. Взгляните на этот пример: https://codesandbox.io/s/6w97yx0yo3. Если вы не return внутри loadSomeUsers, ответ, который вы получите в компоненте, будет undefined вместо желаемой полезной нагрузки.

0 голосов
/ 15 мая 2018

Разобрался с проблемой.Скинул несколько отладчиков в действиях feathers-vuex и понял, что я не установил свой idField в _id в своем конфиге feathersClient.

0 голосов
/ 12 мая 2018

.findJournals() является асинхронным.Это означает, что метод возвращается задолго до того, как его результат был получен.Вы не показываете нам код, который вызывает .findJournals(), но, как вы его структурировали, у вызывающего кода нет способа получить доступ к свойству .journals, поскольку он не будет установлен, когда вернется .findJournals(),Итак, вам нужно вернуть обещание и позволить вызывающему абоненту использовать это обещание для получения результата.

findThoseJournals() {
  // return promise
  return this.findJournals({query: {}});
}

Затем вызывающий абонент сделает следующее:

someObj.findThoseJournals().then(journals => {
    // use journals here
});
...