我正在尝试从Gitlab存储库获取原始文件,遵循官方文档。
函数如下:
methods: {
async getProjects(url, method, payload) {
const token = this.$store.getters.token
const headers = {
'Content-Type': 'application/json',
'Private-Token': token
}
const response = await fetch(url, {
method: method,
headers: headers,
body: JSON.stringify(payload)
})
return response.json()
},
[...]
async addNewProject() {
const payload = {
"name": "newProjectName",
"namespace_id": 12,
"description": "description"
}
this.getProjects("https://gitlab.example.com/api/v4/projects/", "POST", payload)
.then(data => {
console.log(data.id)
})
.catch((e) => {
console.error(e)
})
let rawFile = null
try {
rawFile = await JSON.parse(this.getProjects("https://gitlab.example.com/api/v4/projects/1/repository/files/readme%2Emd/raw?ref=master", "GET"))
} catch (e) {
rawFile = this.getProjects("https://gitlab.example.com/api/v4/projects/1/repository/files/readme%2Emd/raw?ref=master", "GET")
}
console.log(rawFile)
}
}
记录rawFile
显示一个挂起的承诺对象,状态为拒绝,SyntaxError
如标题所示。
有没有可能导致这个错误的原始格式文件?如果是,如何预防?
有几件事正在发生。
- gitlab.example.com不存在,所以很难知道你实际得到什么结果
- 您正在将承诺传递给
JSON.parse
。您需要使用await
或then
来使用响应: - 你的
getProjects
的结束调用response.json()
将解析json。你不需要再次解析它。
使用
let rawFile = await this.getProjects("https://gitlab.example.com/api/v4/projects/1/repository/files/readme%2Emd/raw?ref=master", "GET")
如果响应是json
,那将给你一个对象,但如果响应不是json,你想使用response.text()
代替。你需要一个不同的函数:
async getTextFile(url) {
const token = this.$store.getters.token
const headers = {
'Private-Token': token
}
const response = await fetch(url, {
method: "GET",
headers: headers
})
return response.text()
}
然后像这样调用它:
let rawFile = await this.getTextFile("https://gitlab.example.com/api/v4/projects/1/repository/files/readme%2Emd/raw?ref=master")