尝试获取对象返回Uncaught TypeError:对象函数ParsePromise()

时间:2016-01-23 04:00:37

标签: javascript parse-platform vue.js es6-promise

以下代码根据其id返回Document对象,然后根据该对象查找其对应的部分。 document是一个Parse对象,document.toJSON将此对象转换为Javascript对象。 sections是一个Javascript对象数组。

main.js:

  data () {
    return {
      id: '',
      document: {},
      sections: [],
      content: ''
    }
  },

  route: {
    data ({ to }) {
      return store.first(to.params.id).then((document) => ({
        document: document.toJSON(),
        sections: store.findSection(document).then((result) => this.sections = result)
      }))
    }
  },

store.js:

const store = {}

store.findSection = (obj) => {
  const Section = Parse.Object.extend('Section')
  const query = new Parse.Query(Section)
  query.equalTo('document', obj)
  return query.find().then((results) =>
    _.map(results, (result) =>
      result.toJSON()
    )
  )
}

export default store

出于某种原因,store.findSelection会抛出此错误:

Uncaught TypeError: Object function ParsePromise() {
    _classCallCheck(this, ParsePromise);

    this._resolved = false;
    this._rejected = false;
    this._resolvedCallbacks = [];
    this._rejectedCallbacks = [];
  } has no method 'all'

可能是什么问题,以及如何解决?

修改

奇怪的是,如果我这样做(在route下):

main.js:

  methods: {
    submit () {
      store.findSection(store.transform(this.document)).then((result) => this.sections = result)
    }
  }

store.js:

store.transform = (obj) => {
  obj.className = 'Document'
  return Parse.Object.fromJSON(obj)
}

store.findSection正确并输出正确的内容:[Object, Object, Object]

1 个答案:

答案 0 :(得分:2)

您似乎正在为sections数据分配承诺。

更好的方法是再次将promise链接到查找部分,并在promise链的末尾返回结果:

return ...then((document) => { return findSection(document)})
.then((sections) => ({
    document: document.toJSON(),
    sections: sections
})

另一种方法是观看document数据的更改并使用vue-async-data插件(https://github.com/vuejs/vue-async-data)更新部分(注意:路由器仅用于设置document在这种情况下):

watch {
   document: reloadAsyncData
},
asyncData () {
   return store.findSection(document).then((result) => {
      return {sections:result}
   })
},