Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用Fetch API在函数中检索json信息,然后尝试在另一个函数中使用它们_Javascript_Json_Ecmascript 6_Promise_Fetch Api - Fatal编程技术网

Javascript 尝试使用Fetch API在函数中检索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); }); } 在这里,我可以检索我需要的东西,并安慰他们,以确保他们 然后我必须在另一个函数中使用这些数据,该函数通过

我需要从一个URL(包含JSON格式的信息)获取一些关于几个对象的信息。 于是我写道:

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;i
then()
需要一个函数。您可以通过该函数的单个参数访问承诺的结果数据,这可以通过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我添加了一些注释。