Javascript 尝试使用Fetch API在函数中检索json信息,然后尝试在另一个函数中使用它们
我需要从一个URL(包含JSON格式的信息)获取一些关于几个对象的信息。 于是我写道:Javascript 尝试使用Fetch API在函数中检索json信息,然后尝试在另一个函数中使用它们,javascript,json,ecmascript-6,promise,fetch-api,Javascript,Json,Ecmascript 6,Promise,Fetch Api,我需要从一个URL(包含JSON格式的信息)获取一些关于几个对象的信息。 于是我写道: static fetchObj(){ fetch("http://localhost:1337/objects") .then(callback => { return callback.json(); }) .then(data => { console.log(data); }); } 在这里,我可以检索我需要的东西,并安慰他们,以确保他们 然后我必须在另一个函数中使用这些数据,该函数通过
static fetchObj(){
fetch("http://localhost:1337/objects")
.then(callback => {
return callback.json();
})
.then(data => {
console.log(data);
});
}
在这里,我可以检索我需要的东西,并安慰他们,以确保他们
然后我必须在另一个函数中使用这些数据,该函数通过ID查找这些对象:
static fetchObjById(id) {
MyClass.fetchObj()
.then(
for(var i=0; i<data.id.length; i++){
if(data[i].id == id)
console.log("found");
else
console.log("not found");
}
}
static fetchObjById(id){
MyClass.fetchObj()
.那么(
for(var i=0;ithen()
需要一个函数。您可以通过该函数的单个参数访问承诺的结果数据,这可以通过arrow函数轻松实现
另外,我建议您放弃显式for循环,转而研究声明式编程。与then()
类似,在数组上调用forEach()
可以使用箭头函数访问每个元素。对我来说,这更具可读性
最后,console.log
调用可以稍微简化,方法是首先声明打印消息应该是什么(使用三元运算符),然后使用该消息调用console.log
const fetchObjById = (id) => {
MyClass.fetchObj()
.then(data => {
data.forEach(d => {
const message = d.id === id
? 'found'
: 'not found';
console.log(message);
})
}
}
then()
需要一个函数。您可以通过该函数的单个参数访问Promise的结果数据,这很容易用arrow函数实现
另外,我建议您放弃显式for循环,转而研究声明式编程。与then()
类似,在数组上调用forEach()
可以使用箭头函数访问每个元素。对我来说,这更具可读性
最后,console.log
调用可以稍微简化,方法是首先声明打印消息应该是什么(使用三元运算符),然后使用该消息调用console.log
const fetchObjById = (id) => {
MyClass.fetchObj()
.then(data => {
data.forEach(d => {
const message = d.id === id
? 'found'
: 'not found';
console.log(message);
})
}
}
这也是一种查找id的方法
varid=4;
函数fetchObjById(数据){
控制台日志(数据);
对于(变量i=0;iresponse.json())
.然后(data=>myData=data)
。然后(()=>fetchObjById(myData));
这也是一种查找id的方法
varid=4;
函数fetchObjById(数据){
控制台日志(数据);
对于(变量i=0;iresponse.json())
.然后(data=>myData=data)
.然后(()=>fetchObjById(myData))
不要只在fetchObj
中记录数据
,而是返回它-以及返回函数的承诺。在fetchObjById
中,需要传递一个回调函数,该函数将数据
作为的参数,然后
-传递一个循环是无效的语法错误的。Th传递给then()
的参数必须是一个函数。您应该像MyClass.fetchObj()一样接受循环。然后(data=>{for….}
现在我写了这样一个:静态fetchObj(){return fetch(“http://localhost:1337/objects)然后(回调=>{return callback.json();})。然后(数据=>{return data;};}静态fetctObjById(id){MyClass.fetchObj().then(data=>{data.forEach(d=>{if(d.id==id){console.log(“找到:+d.name);}else console.log(“未找到”);}
它似乎起作用,但我不知道它是否正确。我添加了一些return。log
在fetchObj
中记录数据
,但返回它-还返回函数的承诺。在fetchjbyid
中,需要将数据作为参数传递给的回调函数de>then
-传递循环无效语法您的语法错误。传递给then()
的参数必须是一个函数。您应该像MyClass.fetchObj()那样接受循环。然后(data=>{for…}
现在我写了以下内容:静态fetchObj(){return fetch(“http://localhost:1337/objects),然后(回调=>{return callback.json();}).then(data=>{return data;});}static fetctObjById(id){MyClass.fetchObj().then(data=>{data.forEach(d=>{if(d.id==id){console.log(“找到:+d.name);}else console.log(“not found”);}}}}
它似乎有效,但我不知道它是否正确。我添加了一些return..感谢您的回答,我在第一条注释下进行了注释:)我试图添加foreach语句以消除另一个临时变量i:)没有注释的代码是无用的。如果你解释你做了什么以及为什么这么做,你的答案对每个人都会更有帮助。@FelixKling我添加了一些注释。感谢你的回答,我在第一条注释下注释:)我试图添加foreach语句以消除另一个临时变量I:)没有注释的代码是无用的。如果你解释你做了什么以及为什么做,你的答案对每个人都会更有帮助。@FelixKling我添加了一些注释。