Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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请求并等待返回值_Javascript_Node.js_Mongodb_React Native - Fatal编程技术网

Javascript 当我调用函数时,如何在函数中放置一个fetch请求并等待返回值

Javascript 当我调用函数时,如何在函数中放置一个fetch请求并等待返回值,javascript,node.js,mongodb,react-native,Javascript,Node.js,Mongodb,React Native,我正在使用react native、mongo DB和node js,我需要创建一些数据库函数,并将它们放在一些模块中,以便能够在需要时重用它们。为了从mongo数据库中获取数据,我使用fetch()函数返回一个承诺。因此,对于我创建的所有没有返回值的函数,我使用了。然后,我没有遇到任何问题。另一方面,当我在fetch().then()函数中返回一个值并使用这个返回值时,我会得到未定义的值。我用于函数的代码如下所示: export const getUsers = () => { //

我正在使用react native、mongo DB和node js,我需要创建一些数据库函数,并将它们放在一些模块中,以便能够在需要时重用它们。为了从mongo数据库中获取数据,我使用
fetch()
函数返回一个承诺。因此,对于我创建的所有没有返回值的函数,我使用了
。然后
,我没有遇到任何问题。另一方面,当我在
fetch().then()函数中返回一个值并使用这个返回值时,我会得到未定义的值。我用于函数的代码如下所示:

export const getUsers = () => {
  //I cannot use this function because of returning a promise
  fetch("http://1jjsd12zaws.ngrok.io/database/", {
    method: "GET",
    headers: {
      "Content-Type": "application/json",
    },
  })
    .then((res) => {
      res.json();
    })
    .then((data) => {
      return JSON.stringify(data);
    });
};
然后,当我尝试运行此代码时:

let users=getUsers();
console.log(users);
它打印未定义的


我认为,
console.log(users)
getUsers()返回其值之前运行。但是我不知道为什么会发生这种情况,我希望它等待
getUsers()
执行,然后完成它的工作。

异步和等待应该包括它。上的示例比我能更好地解释它,并且应该适用于您的用例。

  • 您需要在
    getUsers
    内返回
    fetch(..)
    (这就是为什么您得到
    未定义的
  • 您还需要在第一个
    中返回
    res.json()
    ,然后返回
  • 由于
    getUsers
    返回承诺,因此需要使用
    。然后
    (或
    async/await
    )访问承诺值:
    getUsers()。然后(users=>{…})
const getUsers=()=>{
返回获取('http://1jjsd12zaws.ngrok.io/database/', {
方法:“GET”,
标题:{
“内容类型”:“应用程序/json”
}
})
。然后(res=>{
返回res.json();
})
。然后(数据=>{
返回JSON.stringify(数据);
});
};

getUsers().then(users=>console.log(users))
getUsers
没有
return
语句,因此它当然返回
未定义的
。你需要
在它里面返回fetch(…)
(加上额外的
。然后
子句),然后像
getUsers()那样调用它。然后(data=>{/*do stuff*/})
我应该返回
res.json()
还是
fetch(…)
?所以你需要返回
fetch()。然后()…
getUsers
里面,然后返回
res.json()
在第一个
中,然后
它工作了,非常感谢。但是我不知道这里返回的是什么。fetch还是字符串化的JSON?它是在这里首先返回一个fetch,然后当我使用then方法进行该fetch时,我会得到下一个返回值?你可以这样看:当你执行
fetch()时。然后(…)。然后(…)
获取的结果通过
链传递。然后
处理程序(第一个
然后
从响应中提取json,然后第二个
然后
将前一个值字符串化,依此类推)…最后执行
getUsers()。然后()
您基本上是在
链中添加另一个
,然后