拒绝的承诺与SyntaxError:意外的令牌i在JSON中的位置0从Gitlab获取原始文件时 &



我正在尝试从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。您需要使用awaitthen来使用响应:
  • 你的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")

最新更新