2016-01-23 89 views
1

以下代碼基於其id返回Document對象,然後根據對象找到其相應的部分。 document是一個Parse對象,並且將此對象變成一個Javascript對象。 sections是Javascript對象的數組。嘗試獲取對象返回未捕獲的TypeError:對象函數ParsePromise()

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]

回答

2

你似乎是指派的承諾sections數據。

一個更好的辦法是鏈條的承諾再次找到段,並在承諾鏈的末端返回結果:

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} 
    }) 
}, 
相關問題