首页 > 解决方案 > Reactjs:用 axios 做一个函数来承诺

问题描述

我的上下文提供程序中有这个函数我希望它返回一个承诺,以便我可以从axios访问返回的数据

    const sendRquest =(service,data,method,url)=>{
        let base = api.find(item => item.name ===service )
        let config = {
            method: method,
            url: `${base.url}/${url}`,
            headers: {
              'x-clientId': clientId,
              'Content-Type': 'application/json',
            },
            data: data
          };
          axios(config)
          .then(function (res) {
            return res
          })
          .catch(function (error) {
            return error
          });
    }

我正在寻找的结果是在需要时在每个其他组件中编写这样的代码

sendRquest('usermanagement',data,'post','foo/bar').then(res=>console.log(res.data)).catch(err=>console.log(err))

标签: javascriptangularjsreactjswebaxios

解决方案


你必须回报承诺。

就像是

    const sendRquest =(service,data,method,url)=>{
        let base = api.find(item => item.name ===service )
        let config = {
            method: method,
            url: `${base.url}/${url}`,
            headers: {
              'x-clientId': clientId,
              'Content-Type': 'application/json',
            },
            data: data
          };
        return axios(config)
          .then(function (res) {
            return res
          })
          .catch(function (error) {
            return error
          });
    }

请小心,因为您正在通过.catch这样的使用“吞下”错误。返回的承诺sendRquest永远不会“失败”(拒绝),但会成功(解决)数据或错误有效负载。


推荐阅读