Javascript React.js:为什么状态未定义?
我需要在脚本的每次迭代中写入状态信息。如何正确地做Javascript React.js:为什么状态未定义?,javascript,node.js,reactjs,promise,Javascript,Node.js,Reactjs,Promise,我需要在脚本的每次迭代中写入状态信息。如何正确地做 getPageLink(一){ 如果(i>0){ console.log(this.state.res)//aaa 新承诺((解决、拒绝)=>{ 请求(this.props.catalogLinks[i],函数(错误、响应、html){ 如果(!error&&response.statusCode==200){ var$=cheerio.load(html); $('.post\u title\u link')。每个(函数(i,元素){ co
getPageLink(一){
如果(i>0){
console.log(this.state.res)//aaa
新承诺((解决、拒绝)=>{
请求(this.props.catalogLinks[i],函数(错误、响应、html){
如果(!error&&response.statusCode==200){
var$=cheerio.load(html);
$('.post\u title\u link')。每个(函数(i,元素){
console.log(this.state.res)//未定义
});
决议(“结果”);
}否则{
console.log('sss',this.state.res)//未定义
拒绝(“结果”);
}
});
}).那么(
结果=>{
this.getPageLink(--i)
},
错误=>{
this.getPageLink(--i)
}
);
}
}
此
正在回调中被覆盖。您应该将其值放入另一个变量中,如下所示:
var that = this;
然后使用从那时起:
getPageLink(一){
如果(i>0){
console.log(this.state.res)
var=这个;
新承诺((解决、拒绝)=>{
请求(this.props.catalogLinks[i],函数(错误、响应、html){
如果(!error&&response.statusCode==200){
var$=cheerio.load(html);
$('.post\u title\u link')。每个(函数(i,元素){
console.log(that.state.res)
});
决议(“结果”);
}否则{
console.log('sss',that.state.res)
拒绝(“结果”);
}
});
}).那么(
结果=>{
this.getPageLink(--i)
},
错误=>{
this.getPageLink(--i)
}
);
}
}
定义回调函数时,必须使用箭头符号()=>{}
:
request(this.props.catalogLinks[i], (error, response, html) => {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('.post__title_link').each((i, element) => {
console.log(this.state.res) // will be defined
});
resolve("result");
} else {
console.log('sss', this.state.res) // will be defined
reject("result");
}
});
这是一个糟糕的模式。处理嵌套范围的正确方法是使用胖箭头函数。