【发布时间】:2018-11-26 20:11:23
【问题描述】:
我试图通过导入它们而不是直接在创建的钩子中调用它们来将我的 axios 调用与我的主 vue 实例分开。
我在一个名为 data.js 的单独文件中有这个
import axios from 'axios'
export default{
myData() {
return axios.get(`http://localhost:8080/data.json`)
.then(response => {
// JSON responses are automatically parsed.
return response.data;
})
.catch(e => {
return this.myErrors.push(e)
});
},
在我的 vue 实例中,我有以下内容:
import myDataApi from '@/api/data.js'
export default {
name: 'app',
components: {
myDataApi, // not sure if this is correct
},
data: function () {
return {
myInfo: '',
}
},
created() {
this.myInfo = myDataApi.myData();
console.log('this.myInfo= ', this.myInfo)
},
我正在尝试使用 myData 调用的 json 填充 myInfo。这会在 Vue devtools 中返回 [object Promise],在控制台中返回 Promise {<pending>}。
我需要的所有数据都在 Promise {<pending>} 的一个名为 [[PromiseValue]]:Object 的数组中,所以我知道它正在工作,我只需要知道实现它的正确方法。
【问题讨论】:
-
这是承诺的本质。它处于挂起状态,因为当您记录它时,axios-request 尚未完成。您尝试的第一件事是从您的承诺中解开您的数据,但要意识到这不是问题所在。 Promise 解决了知道数据何时可用的问题。您可以对该值进行其他修改,例如
this.myInfo = myDataApi.myData().then(r=>r.a = b);,但承诺仍然存在。但是,您可以将其直接绑定到您的模板,加载时会显示该值,所以这不是您可能认为的问题。
标签: javascript promise vuejs2 axios