实际上,
我正在尝试从调用中获取结果并将其设置为状态,但它不起作用,我不明白为什么:
onButtonClick() {
this.setState({Data: call(id, token)});
}
function call(Id, Token){
var brand = Id;
ReportTitle = brand;
url = base_url + brand + "/posts?access_token=" + Token + request;
var hasnext = true;
return getNextAndConcatJSonOrNot(url, 0, finalJson);
}
在这个函数中,我在$ .getJSON中进行递归调用。
function getNextAndConcatJSonOrNot(urlToCall, cnt, jsonData){
var jsonFinalObject = '';
$.getJSON(urlToCall).done(function(data) {
var tempJson = {};
tempJson = jsonData.concat(data.data);
jsonData = tempJson;
cnt++;
if(data.paging.next != "" && cnt < 2){
getNextAndConcatJSonOrNot(data.paging.next, compteur, jsonData);
} else {
return JSON.stringify(jsonData);
}
});
}
但是每次返回''时,我都试图将.bind(this)放在$ .getJson的末尾并在内部执行setState但它不起作用。 我首先尝试使用我的函数(除了onbuttonclick)在另一个file.js中,然后我尝试在组件中使用这些函数。
我能做些什么让这项工作好吗?感谢。
答案 0 :(得分:1)
您无法从Created /tmp/tmp.Toet7Wn7bz file, with data= 4221696069
Created /tmp/tmp.kc9OLaX84U directory
Created /tmp/tmp.S2OQ8Wh6Iz file, with data= 172066121
Created /tmp/tmp.d1oFQ4DINx directory
Created /tmp/tmp.wGl42vpRLc file, with data= 3188097801
Created /tmp/tmp.xbAhMUFAZi directory
Created /tmp/tmp.4dI5M7amYL file, with data= 1085037810
Created /tmp/tmp.vAMAg39pjK directory
Created /tmp/tmp.AXP6yztDMj file, with data= 2348013838
Created /tmp/tmp.Qc5kyZtmnn directory
返回数据,因为.done
会返回Promise。您应该传递一个回调函数,将状态设置为.done
并在getNextAndConcatJSonOrNot
中调用它。
.done
这样的事情应该有效。
答案 1 :(得分:0)
好的,在Max的答案的帮助下我找到了解决方案:
handleResponse(data, context) {
// bind this in your constructor.
context.setState({ Data: data });
}
onClick() {
var brand = Id;
ReportTitle = brand;
url = base_url + brand + "/posts?access_token=" + Token + request;
var hasnext = true;
getNextAndConcatJSonOrNot(url, 0, finalJson, this);
}
getNextAndConcatJSonOrNot(urlToCall, cnt, jsonData, context){
var jsonFinalObject = '';
$.getJSON(urlToCall).done(function(data) {
var tempJson = {};
tempJson = jsonData.concat(data.data);
jsonData = tempJson;
cnt++;
if(data.paging.next != "" && cnt < 2){
getNextAndConcatJSonOrNot(data.paging.next, compteur, jsonData);
} else {
context.handleResponse(jsonData, context);
}
}.bind(this));
}
解决方法是添加.bind(this)并在getNextAnd ...函数中传递“this”以获取handleResponse和setState的上下文。