Javascript 无法读取VUE中链接的AXIO事务中的公共数组项
我有一个从数组调用的链式AXIOS调用。我需要在第一个调用发出另一个API请求之前完成第二个调用,然后该过程才能正常工作。我唯一的问题是,我无法从第二条链的响应中引用任何内容。我需要将调用数组(arr)更新为公共数组this.excelData.results,甚至更新原始数组的深度副本。每次我听到一个错误,说:Javascript 无法读取VUE中链接的AXIO事务中的公共数组项,javascript,arrays,vue.js,axios,Javascript,Arrays,Vue.js,Axios,我有一个从数组调用的链式AXIOS调用。我需要在第一个调用发出另一个API请求之前完成第二个调用,然后该过程才能正常工作。我唯一的问题是,我无法从第二条链的响应中引用任何内容。我需要将调用数组(arr)更新为公共数组this.excelData.results,甚至更新原始数组的深度副本。每次我听到一个错误,说: err = TypeError: Cannot read property 'ORCID' of undefined at eval (webpack- internal:
err = TypeError: Cannot read property 'ORCID' of undefined at eval (webpack-
internal:///./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-
loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-
loader/lib/index.js?!./src/views/examples/ExcelWorksheet.vue?vue&type=script&lang=js&:410:49) at
NodeList.forEach (<anonymous>) at eval (webpack-internal:///./node_modules/cache-
loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-
loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/examples/ExcelWorksheet.vue?
vue&type=script&lang=js&:381:28) at NodeList.forEach (<anonymous>) at eval (webpack-
internal:///./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-
loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-
loader/lib/index.js?!./src/views/examples/ExcelWorksheet.vue?vue&type=script&lang=js&:378:33)
},
您可以访问
arr
,否则错误可能是:无法读取未定义的属性索引
您在第一个请求之后增加了索引
,arr
在增加的索引
处有值未定义
,因此错误表示无法读取未定义
的属性'ORCID'
您可以在之前尝试console.log(arr[index])
进行上述验证。您可以访问arr
,否则错误可能是无法读取未定义的属性索引。您在第一个请求之后增加了索引
,arr
在增加的索引
处有值未定义
,因此错误表示无法读取未定义的属性“ORCID”。您可以在之前尝试console.log(arr[index])
让xyz=arr[index][“ORCID”]
验证上述内容。就是这样。我真的觉得自己很笨。我专注于错误的问题,Vue对我来说是新事物,当我不得不在一些领域做self=this时,我不确定是否是这样。谢谢你把它作为一个答案贴出来,我会给你正确答案的信用;),作为答复张贴。
lookUpORCID(){
this.pubmedArticles=[];
this.makeRequestsFromArray(this.excelData.results);
},
makeRequestsFromArray(arr) {
var self = this
let index = 0;
function request() {
let authorName = arr[index]["Last_Name"]
let linkGetIdList = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?';
linkGetIdList += 'tool=biosketch&db=pubmed&retmode=json&retmax=200&';
linkGetIdList += 'term=' + authorName +'[AU] ';
return axios.get(linkGetIdList).then((res) => {
index++;
let idlist = res.data.esearchresult.idlist
const passID = idlist.join(',')
if (idlist.length > 0) {
var getXmlLink = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?';
getXmlLink += 'db=pubmed&retmode=xml&id=${passID}';
return axios.get(getXmlLink).then((response) => {
// parse document
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(response.data, 'text/xml') // Get ALL XML content
// Do Stuff
**This is the spot that I need to change value in array**
let xyz = arr[index]["ORCID"]
return request();
})
}
if (index >= arr.length) {
return 'done'
}
});
}
return request();