如何等待javascript中包含承诺的函数?

如何等待javascript中包含承诺的函数?,javascript,Javascript,当我有以下功能时: axios .get( `${config.server}/getUsers.php`, { headers: { Authorization: `Bearer ${token}` } } ) .catch((error) => console.error(error)); const getUsers = () => { axios .get( `${conf

当我有以下功能时:

axios
      .get(
        `${config.server}/getUsers.php`,
        { headers: { Authorization: `Bearer ${token}` } }
      )
      .catch((error) => console.error(error));
const getUsers = () => {
   axios
      .get(
        `${config.server}/getUsers.php`,
        { headers: { Authorization: `Bearer ${token}` } }
      ).then(() => {
          return true;
      })
      .catch((error) => {
          console.error(error)
          return false;
      });
};
使用
.then()
接收用户后,我可以做一些事情

但是,如果我把这个请求放在一个函数中:

axios
      .get(
        `${config.server}/getUsers.php`,
        { headers: { Authorization: `Bearer ${token}` } }
      )
      .catch((error) => console.error(error));
const getUsers = () => {
   axios
      .get(
        `${config.server}/getUsers.php`,
        { headers: { Authorization: `Bearer ${token}` } }
      ).then(() => {
          return true;
      })
      .catch((error) => {
          console.error(error)
          return false;
      });
};

如果
getUsers()
已完成且为真,我该怎么做?

您不能等待函数。你只能等待承诺(或其他承诺)

如果
getUsers()
返回了一个承诺,那么您可以调用它并等待其返回值:

await getUsers();
然而,事实并非如此。所以,在你能做到这一点之前,你必须改变它,这样它才能回报你的承诺

return axios.get...

你不能等待一个函数。你只能等待承诺(或其他承诺)

如果
getUsers()
返回了一个承诺,那么您可以调用它并等待其返回值:

await getUsers();
然而,事实并非如此。所以,在你能做到这一点之前,你必须改变它,这样它才能回报你的承诺

return axios.get...
解决方案 Axio请求是一种承诺,因此,需要将其打包并返回才能启用:

像这样:

const getUsers = () => {
  return axios
    .get(`${config.server}/getUsers.php`, {
      headers: { Authorization: `Bearer ${token}` },
    })
    .then(() => {
      return true;
    })
    .catch(error => {
      console.error(error);
      return false;
    });
};
这样你就可以做这样的事情:

getusers().then((returnedReqData)=>{
    console.log(returnedReqData);
})
const async getUsers = () => {
  try {
    let users = await axios({
      method: 'get',
      url: `${config.server}/getUsers.php`,
      headers: { Authorization: `Bearer ${token}` }
    });
    return {success: true, result: users};
  } catch (error) {
    return {success: false, error};
  }
};

解决方案 Axio请求是一种承诺,因此,需要将其打包并返回才能启用:

像这样:

const getUsers = () => {
  return axios
    .get(`${config.server}/getUsers.php`, {
      headers: { Authorization: `Bearer ${token}` },
    })
    .then(() => {
      return true;
    })
    .catch(error => {
      console.error(error);
      return false;
    });
};
这样你就可以做这样的事情:

getusers().then((returnedReqData)=>{
    console.log(returnedReqData);
})
const async getUsers = () => {
  try {
    let users = await axios({
      method: 'get',
      url: `${config.server}/getUsers.php`,
      headers: { Authorization: `Bearer ${token}` }
    });
    return {success: true, result: users};
  } catch (error) {
    return {success: false, error};
  }
};

您可以像这样重构代码:

getusers().then((returnedReqData)=>{
    console.log(returnedReqData);
})
const async getUsers = () => {
  try {
    let users = await axios({
      method: 'get',
      url: `${config.server}/getUsers.php`,
      headers: { Authorization: `Bearer ${token}` }
    });
    return {success: true, result: users};
  } catch (error) {
    return {success: false, error};
  }
};
如果请求成功,您可以返回带有
结果
数据的
success:true
。如果请求因某种原因失败,您可以返回
success:false
错误

注意:当您使用
async
语法时,函数将返回一个
Promise
,因此您可以执行
。然后()
当您调用
getUsers()
时,它是另一个函数,或者您也可以使用
async
语法

使用
。然后()

someOtherFunction() => {
  getUsers().then((users)=>{
    res.status(200).json();
  }).catch((error))=>{
    res.status(400).json(error);
  }
}
async someOtherFunction() => {
  try {
    let users = await getUsers();
    res.status(200).json();
  } catch (error) {
    res.status(400).json(error);
  }
}
使用
async
时,它看起来像:

someOtherFunction() => {
  getUsers().then((users)=>{
    res.status(200).json();
  }).catch((error))=>{
    res.status(400).json(error);
  }
}
async someOtherFunction() => {
  try {
    let users = await getUsers();
    res.status(200).json();
  } catch (error) {
    res.status(400).json(error);
  }
}

您可以像这样重构代码:

getusers().then((returnedReqData)=>{
    console.log(returnedReqData);
})
const async getUsers = () => {
  try {
    let users = await axios({
      method: 'get',
      url: `${config.server}/getUsers.php`,
      headers: { Authorization: `Bearer ${token}` }
    });
    return {success: true, result: users};
  } catch (error) {
    return {success: false, error};
  }
};
如果请求成功,您可以返回带有
结果
数据的
success:true
。如果请求因某种原因失败,您可以返回
success:false
错误

注意:当您使用
async
语法时,函数将返回一个
Promise
,因此您可以执行
。然后()
当您调用
getUsers()
时,它是另一个函数,或者您也可以使用
async
语法

使用
。然后()

someOtherFunction() => {
  getUsers().then((users)=>{
    res.status(200).json();
  }).catch((error))=>{
    res.status(400).json(error);
  }
}
async someOtherFunction() => {
  try {
    let users = await getUsers();
    res.status(200).json();
  } catch (error) {
    res.status(400).json(error);
  }
}
使用
async
时,它看起来像:

someOtherFunction() => {
  getUsers().then((users)=>{
    res.status(200).json();
  }).catch((error))=>{
    res.status(400).json(error);
  }
}
async someOtherFunction() => {
  try {
    let users = await getUsers();
    res.status(200).json();
  } catch (error) {
    res.status(400).json(error);
  }
}

返回axios.get()
然后
getUsers.then()
。你必须履行诺言,这能回答你的问题吗?只需去除卷发和无用的
,然后
捕获
const-getUsers=()=>axios.get(…)
,就是这样。
返回axios.get()
然后
getUsers.then()
。你必须履行诺言,这能回答你的问题吗?只需去除卷发和无用的
,然后
catch
const getUsers=()=>axios.get(…)
,就是这样。相同的概念适用于回调,称为Promisification。相同的概念适用于回调,称为Promisification。