Javascript 当我调用函数时,如何在函数中放置一个fetch请求并等待返回值
我正在使用react native、mongo DB和node js,我需要创建一些数据库函数,并将它们放在一些模块中,以便能够在需要时重用它们。为了从mongo数据库中获取数据,我使用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 = () => { //
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()。然后()
您基本上是在链中添加另一个,然后