React native Axios更新值超出该范围,以断开循环
我目前仍在学习如何使用React Native 我想做的是将limit值更新为1,这样它将打破while循环,但我不确定如何执行它,因为我无法从Axios POST调用中的.then()内部更新该值。 如果有人能指出解决这个问题的方法,我很高兴。谢谢你的帮助React native Axios更新值超出该范围,以断开循环,react-native,axios,React Native,Axios,我目前仍在学习如何使用React Native 我想做的是将limit值更新为1,这样它将打破while循环,但我不确定如何执行它,因为我无法从Axios POST调用中的.then()内部更新该值。 如果有人能指出解决这个问题的方法,我很高兴。谢谢你的帮助 var limit = 0; while (limit == 0) { running = running + 20; console.log("restart")
var limit = 0;
while (limit == 0) {
running = running + 20;
console.log("restart");
postDataCalories = {
"query": `${running} minutes run and ${walking} minutes walking`,
"gender":"male",
// "nf_calories": 363.62,
"weight_kg":63.5,
"height_cm":167.64,
"age":30
};
console.log(`${running} minutes run and ${walking} minutes walking`);
axios.post('https://trackapi.nutritionix.com/v2/natural/exercise', postDataCalories, axiosConfig2)
.then((res3) => {
console.log("exercise RESPONSE RECEIVED: ", res3);
let caloriesFood = res2.data.foods[0].nf_calories;
let caloriesExercise = res3.data.exercises[0].nf_calories;
let caloriesDifferences = caloriesFood - caloriesExercise;
console.log("hi " + caloriesDifferences);
if (caloriesDifferences < 50){
console.log('done');
limit = 1;
} else {
console.log('nope');
}
})
}
var限制=0;
while(limit==0){
运行=运行+20;
console.log(“重启”);
PostDataCarries={
“查询”:“${running}分钟跑步和${walking}分钟步行”,
“性别”:“男性”,
//“nf_卡路里”:363.62,
“重量”_kg:63.5,
“高度_cm”:167.64,
“年龄”:30岁
};
log(`running}minutes run和${walking}minutes walking`);
轴心柱https://trackapi.nutritionix.com/v2/natural/exercise,PostDataCarries,axiosConfig2)
。然后((res3)=>{
日志(“收到的练习响应:”,res3);
让卡路里食物=res2.data.foods[0].nf_卡路里;
let caloriesExercise=res3.data.exercises[0].nf\u卡路里;
让热量差异=热量食物-热量锻炼;
console.log(“hi”+热量差);
if(热量差<50){
console.log('done');
限值=1;
}否则{
console.log('nope');
}
})
}
这在您的情况下是正确的,您不能中断then函数中的while循环,因为该函数在不同的时间被调用(他们称之为异步)
你可以做两件事。如果您有权在您的环境中访问wait/async,则可以将其重写为:
async someFunction() {
var limit = 0;
var running = 1; // arbitrarily start at 1.
while (limit == 0) {
running = running + 20;
console.log("restart running " + running);
postDataCalories = {
"query": `${running} minutes run and ${walking} minutes walking`,
"gender":"male",
// "nf_calories": 363.62,
"weight_kg":63.5,
"height_cm":167.64,
"age":30
};
console.log(`${running} minutes run and ${walking} minutes walking`);
var res3 = await axios.post('https://trackapi.nutritionix.com/v2/natural/exercise', postDataCalories, axiosConfig2)
console.log("exercise RESPONSE RECEIVED: ", res3);
let caloriesFood = res2.data.foods[0].nf_calories;
let caloriesExercise = res3.data.exercises[0].nf_calories;
let caloriesDifferences = caloriesFood - caloriesExercise;
console.log("hi " + caloriesDifferences);
if (caloriesDifferences < 50){
console.log('done');
limit = 1;
// you may also do:
break;
} else {
console.log('nope');
}
}
}
}
async someFunction(){
var限值=0;
var running=1;//任意从1开始。
while(limit==0){
运行=运行+20;
console.log(“重启运行”+运行);
PostDataCarries={
“查询”:“${running}分钟跑步和${walking}分钟步行”,
“性别”:“男性”,
//“nf_卡路里”:363.62,
“重量”_kg:63.5,
“高度_cm”:167.64,
“年龄”:30岁
};
log(`running}minutes run和${walking}minutes walking`);
var res3=等待axios.post('https://trackapi.nutritionix.com/v2/natural/exercise,PostDataCarries,axiosConfig2)
日志(“收到的练习响应:”,res3);
让卡路里食物=res2.data.foods[0].nf_卡路里;
let caloriesExercise=res3.data.exercises[0].nf\u卡路里;
让热量差异=热量食物-热量锻炼;
console.log(“hi”+热量差);
if(热量差<50){
console.log('done');
限值=1;
//你也可以这样做:
打破
}否则{
console.log('nope');
}
}
}
}
在通常的网络环境下,它需要一个现代浏览器(Firefox/Chrome)(或者当你有babel/regenerator运行时,也许你的设置已经能够传输/运行这个了。)
如果您无法访问async/await,则需要应用递归(以解决同步性问题)。通常,您可以按顺序执行任务(一行、一步一步、使用while循环),现在您可以编写如下内容:
function runTheLoop(running, walking) {
postDataCalories = {
"query": `${running} minutes run and ${walking} minutes walking`,
"gender":"male",
// "nf_calories": 363.62,
"weight_kg":63.5,
"height_cm":167.64,
"age":30
};
console.log(`${running} minutes run and ${walking} minutes walking`);
axios.post('https://trackapi.nutritionix.com/v2/natural/exercise', postDataCalories, axiosConfig2)
.then((res3) => {
console.log("exercise RESPONSE RECEIVED: ", res3);
let caloriesFood = res2.data.foods[0].nf_calories;
let caloriesExercise = res3.data.exercises[0].nf_calories;
let caloriesDifferences = caloriesFood - caloriesExercise;
console.log("hi " + caloriesDifferences);
if (caloriesDifferences < 50){
console.log('done');
// limit = 1;
return;
} else {
console.log('nope');
// This is the recursive variant of "running the loop again"
return runTheLoop(running + 20, walking + 20);
}
})
}
}
// Somewhere:
console.log("restart");
// one minute of walking and one minute of running.
runTheLoop(1, 1);
函数runTheLoop(运行、行走){
PostDataCarries={
“查询”:“${running}分钟跑步和${walking}分钟步行”,
“性别”:“男性”,
//“nf_卡路里”:363.62,
“重量”_kg:63.5,
“高度_cm”:167.64,
“年龄”:30岁
};
log(`running}minutes run和${walking}minutes walking`);
轴心柱https://trackapi.nutritionix.com/v2/natural/exercise,PostDataCarries,axiosConfig2)
。然后((res3)=>{
日志(“收到的练习响应:”,res3);
让卡路里食物=res2.data.foods[0].nf_卡路里;
let caloriesExercise=res3.data.exercises[0].nf\u卡路里;
让热量差异=热量食物-热量锻炼;
console.log(“hi”+热量差);
if(热量差<50){
console.log('done');
//限值=1;
返回;
}否则{
console.log('nope');
//这是“再次运行循环”的递归变体
返回runTheLoop(跑步+20,步行+20);
}
})
}
}
//某处:
console.log(“重启”);
//一分钟的步行和一分钟的跑步。
runTheLoop(1,1);
注意:我使用了您的代码,使示例与您的情况相关,我自己无法测试,因此如果您复制并粘贴此代码,可能无法直接工作。您好!谢谢你和我分享你的工作方法,先生。我确实尝试了async Wait备选方案,但似乎限制仍然无法打破循环,而且它一直在继续。我有一个问题,我是否能够更新“如果(卡路里差异<50)”声明下的跑步值?因为我似乎无法做到这一点,因为当我console.log该值时没有任何更改@约书亚:如果它继续按顺序进行(一个接一个),那么我们就非常接近了!是的,您可以更改running变量,但是我怀疑在每个循环上running应该增加20,如果不是这样的话,那么我们可能做错了什么。您可以做的另一件事是,您也可以使用'break;'陈述我将更新代码示例以显示它。事实上,我确实是通过使用async/await方法来实现的。非常感谢。