has_rejected_advisories=false
我的结果是:
res.body[i]
但我无法在此函数之外使用superagent
,即我希望a = superagent.get(URL).then((res) => {
for(let i in res.body) {
if(i==='has_rejected_advisories') {
console.log(i + "="+res.body[i]);
}
}
})
.catch((err) => err.message));
if(a===false){/*do this*/}
函数在布尔变量中返回此值以在其他地方使用它。
离。
{{1}}
答案 0 :(得分:1)
这是因为superagent.get(url)
调用是异步的。 a
的值为Promise
由于这是异步的,if (a === false)
实际上是在函数体传递给.then
之前执行的。您需要将此逻辑移至.then
函数,或者如果您喜欢同步查看语法,请使用async/await之类的内容。
答案 1 :(得分:1)
除了jerelmiller的好建议,你需要注意以下几点:
试试这个:
创建一个全局变量,假设它是一个字符串
var mysares = ""
这个例子只会带回1个字符串!不是单一元素。此外,如果你不能让标准的Fetch()工作,不要尝试其他方法,如axios或superagents。现在像我们这样使用全球:
superagent.get(URL).then((res) => {
for(let i in res.body) {
if (i==='has_rejected_advisories') {
//Add comments as will help you
//to explain to yourself and others
//what you're trying to do
//That said if this iteration produces
//correct data then you're fine
//push my result as a string
mysares = res.body[i];
//infact what's in row 1?
mysares = res.body[0];
//Actually I code my own JSON!!
mysares = res.body[1];
console.log(i + "="+mysares);
}
}
})
.catch((err) => err.message));
现在你可以做任何事情:
if(mysares===false){/*do this*/
alert(playDuckHunt());}
注意事项:
res.body[i]
是一个迭代
你不能在函数之外使用它
因为:
它是该功能的本地
你不知道' i
'即使你可以使用它,因为你将在你的循环之外
最后一件事: 循环遍历循环或数组等。 所以(在现实世界中)你不能只是请求循环的值 除非您同意要发布的数据的位置, 类型和桶(它将在何处显示)。
希望这有帮助!
PS>我们需要知道&has 39jected_advisories'在JSON中,所以请将您的json url发送给我们,因为它必须是列/ obj标题名称。或者它是任何旧的' a' var a可以是你的" false"
答案 2 :(得分:0)
在构造函数中:
this.state = {a:null};
在某些功能中:
superagent.get(URL).then(
(res) => {for(let i in res.body)
{
if(i === 'has_rejected_advisories')
{
this.setState({a:res.body[i]})
}
}
}).catch((err)=>(err.message));
在渲染中: 的console.log(this.state.a);
在then()内部,可以使用状态变量来使用该值,但是有许多场景我们无法使用它们,比如我们想要在构造函数下执行所有操作,即初始化状态变量,调用superagent并更改状态变量和使用状态变量。