如何在返回中返回axios响应

zf9nrax1  于 2023-08-04  发布在  iOS
关注(0)|答案(7)|浏览(145)

我想返回axios的响应,但返回的响应总是未定义的:

wallet.registerUser=function(data){
axios.post('http://localhost:8080/register',{
phone:data.phone,
password:data.password,
email:data.email
}).then(response =>{
  return response.data.message;
  console.log(response.data.message);
}).catch(err =>{
  console.log(err);
})
}

console.log(wallet.registerUser(data));

字符串
控制台始终记录为undefined。是他们的任何方式返回这个答案。

fumotvh3

fumotvh31#

console.log不会等待函数完全完成才记录它。这意味着您必须使wallet.registerUser异步,有两种主要方法可以做到这一点:
1.回调--这是当你把一个函数作为参数传递到你现有的函数中,一旦你的axios调用完成,这个函数就会被执行。以下是它如何与您的代码一起工作:

wallet.registerUser=function(data, callback){
  axios.post('http://localhost:8080/register',{
    phone:data.phone,
    password:data.password,
    email:data.email
  }).then(response =>{
    callback(response.data.message);
    console.log(response.data.message);
  }).catch(err =>{
    console.log(err);
  })
}

wallet.registerUser(data, function(response) {
  console.log(response)
});

字符串

  1. Promise -最简单的方法是在函数名前面加上async。这将使从函数返回的任何内容都以promise的形式返回。这就是它在代码中的工作方式:
wallet.registerUser=async function(data){
  axios.post('http://localhost:8080/register',{
    phone:data.phone,
    password:data.password,
    email:data.email
  }).then(response =>{
    return response.data.message;
    console.log(response.data.message);
  }).catch(err =>{
    console.log(err);
  })
}

wallet.registerUser(data).then(function(response) {
  console.log(response);
});


以下是关于异步函数的更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
https://developer.mozilla.org/en-US/docs/Glossary/Callback_function

hgqdbh6s

hgqdbh6s2#

你可以使用Promises:
我是新的React,所以你可以给予我的建议,以改善我的代码。
例如,我想调用checkVerified()函数,它在其他文件中:

Utils.js

export function checkVerified(val, values) {
    return new Promise((resolve, reject) => {
        axios
            .get(`${getInitialServerUrl}/core/check_verified/${val}/`)
            .then(res => {
                resolve(res)
            })
            .catch(err => reject(err))
    })
}

字符串
我从另一个文件调用这个函数:

someFile.js

const handleSubmit = e => {
        e.preventDefault();
        checkVerified(values.mobile, props)
            .then(res => {
               console.log(res);
         })
        .catch(err => console.log(err.response))
    }

c2e8gylq

c2e8gylq3#

您需要将对axios的调用 Package 在一个异步函数中。然后,您可以像往常一样返回响应。
只要用await调用 Package 器方法,就没问题了。不幸的是,为了使用await调用它,调用方法也必须标记为async,等等,直到应用程序中的每个函数都必须标记为async,并且您需要使用await调用所有函数。
这就是async / await关键字的神奇之处--彻底的垃圾。您可能会看到创建异步lambda来 Package await axios的示例,试图不必重构整个应用程序,但它不会工作。
因此, Package 器看起来如下所示...
public void run(URL,data){

axios.post(URL, data)
    .then( (result) => {
        return result;
    });

字符串
}
如果你使用的是typescript,那会增加一些令人沮丧的问题,比如如何将any转换为你想要返回的类型。我可以建议工会类型。
不管怎样,祝你好运!
如果你的环境需要使用代理,axios将不起作用。在这种情况下,可能还有其他情况,使用node-fetch -您将在一天内启动并运行node-fetch。Axios一周后会让你挠头,想知道为什么它不起作用。

csbfibhn

csbfibhn4#

这里的要点是访问promise值。为此,我们只需要以下面的格式记录响应。

static getSearchAPI = () => {
return axios.post(URl);
}

getRestaurents() {
Helpers.getSearchAPI().then(function (response) {
  console.log(response.data);
})}

字符串

ss2ws0br

ss2ws0br5#

我会用一个紧凑的语法实现axios调用,如下所示:

myAxiosCall = async () => {
    return await axios.get('/the-url');
  }

字符串
可以这样称呼:

myAxiosCall.then(data) {
   // Process the axios response
}

gcxthw6b

gcxthw6b6#

const fetch = async () => {
 try {
  const res = await axios.get(url)

  return res
 } catch (err) {
   throw err
 }
}

fetch().then((res) => {
  console.log(res)
}).catch((err) => {
  console.log(err)
})

字符串

yhuiod9q

yhuiod9q7#

我使用了async和await方法,并在这些方法中 Package 了我的axios调用和调用axios调用的函数。我返回了axios值以及其中的响应对象。我在下面的链接中分享了这个片段。
Returning data from Axios API

相关问题