我叫this.getAllJobsAPI(); 在渲染功能中。
这将成功调用getAllJobsAPI(如下所示),并且我能够从JSON作业数组中检索作业名称。
getAllJobsAPI(){
var headers = new Headers();
headers.append('Authorization', 'Basic YWRtaW46YWRtaW4=');
fetch('http://localhost:8080/api/json', {headers: headers})
.then((result) => {
// Get the result
// If we want text, call result.text()
return result.json();
}).then((jsonResult) => {
// get all jobs
var jobs = [];
Object.keys(jsonResult.jobs).forEach(function(key) {
jobs.push(jsonResult.jobs[key].name);
var job = jsonResult.jobs[key].name;
console.log(job);
this.getLastBuildAPI(job);
});
//var a = 'meetup';
//this.getLastBuildAPI(a);
console.log(jsonResult);
})
}
但是调用this.getLastBuildAPI(job); 在for每个循环中引发“未捕获(承诺)TypeError:无法读取未定义的属性'getLastBuildAPI'”错误。但是如果我在函数末尾硬编码一个名称变量并调用this.getLastBuildAPI(a); 我可以获得成功的回应。
有人可以告诉我为什么我不能调用this.getLastBuildAPI(job); 在每个JSON数组?请注意,我能够在控制台中看到作业变量。
谢谢,
因为this
在resolve回调内部是undefined
(因为它是不同的上下文),所以当它在回调外部时this
是您期望的对象。您可以先引用this
var存储它。
getAllJobsAPI(){
var headers = new Headers();
headers.append('Authorization', 'Basic YWRtaW46YWRtaW4=');
var self = this;
fetch('http://localhost:8080/api/json', {headers: headers})
.then((result) => {
// Get the result
// If we want text, call result.text()
return result.json();
}).then((jsonResult) => {
// get all jobs
var jobs = [];
Object.keys(jsonResult.jobs).forEach(function(key) {
jobs.push(jsonResult.jobs[key].name);
var job = jsonResult.jobs[key].name;
console.log(job);
self.getLastBuildAPI(job);
});
//var a = 'meetup';
//this.getLastBuildAPI(a);
console.log(jsonResult);
})
您还可以应用其他方法。
bind
方法。bind()方法创建一个新函数,该函数在被调用时将其关键字设置为提供的值,并在调用新函数时提供给定的参数序列。
Object.keys(jsonResult.jobs).forEach(function(key) {
jobs.push(jsonResult.jobs[key].name);
var job = jsonResult.jobs[key].name;
console.log(job);
this.getLastBuildAPI(job);
}.bind(this));
arrow
功能。在使用arrow
函数之前,每个new
函数都定义了自己的this
值。
例如,对于this
构造函数,可以是新对象。
function Person(age){
this.age=age;
console.log(this);
}
let person=new Person(22);
或者this
可以点到base
对象,如果创建的函数可以像访问obj.getAge()
。
let obj={
getAge:function(){
console.log(this);
return 22;
}
}
console.log(obj.getAge());
arrow
函数不会创建自己的函数this
,而只是使用执行的this
值。另一方面,父作用域的功能使用。enclosing
context
arrow
this
Object.keys(jsonResult.jobs).forEach((key) => {
jobs.push(jsonResult.jobs[key].name);
var job = jsonResult.jobs[key].name;
console.log(job);
this.getLastBuildAPI(job);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句