以下代码根据其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]
答案 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}
})
},