为了账号安全,请及时绑定邮箱和手机立即绑定

使用异步等待不返回值

使用异步等待不返回值

烙印99 2022-09-16 21:43:40
我使用以下代码,这是有效的!我能够获取(当时)点差中的数据,http200Promise.all([    axios({      method: 'post',      url: 'https://oauth2.-arch.mand.com/oauth2/token',      data: qs.stringify({        'grant_type': 'client_credentials'      }, {        'scope': 'run:crud'      }),      headers: {        'Accept': 'application/json',        'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',        'Content-Type': 'application/x-www-form-urlencoded',      }    }),    axios({      method: 'post',      url: 'https://oauth2.-arch.mand.com/oauth2/token',      data: qs.stringify({        'grant_type': 'client_credentials'      }, {        'scope': 'exe:crud'      }),      headers: {        'Accept': 'application/json',        'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',        'Content-Type': 'application/x-www-form-urlencoded',      }    })  ]).then(axios.spread((...responses: AxiosResponse[]) => {      const aToken = responses[0];      const bToken = responses[1];    }).catch(function(error: any) {      console.log("Error: " + error);    });现在我想用异步函数包装它,该函数返回两个响应(响应[0],响应[1])我创建了这个函数const FetchData = async (): Promise<{ run: string; app: string }> => {let aToken:string;let bToken:string;Promise.all([    axios({      method: 'post',      url: 'https://oauth2.-arch.mand.com/oauth2/token',      data: qs.stringify({        'grant_type': 'client_credentials'      }, {        'scope': 'run:crud'      }),      headers: {        'Accept': 'application/json',        'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',        'Content-Type': 'application/x-www-form-urlencoded',      }    }),   问题是我在属性中得到了空值,同时在main函数内放置了一个断点,我看到我进入了控制台,在我实际从中获取值之前,任何想法如何采用代码从dispa运算符返回值然后调用控制台?val).then(axios.spread((
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您使用不当。您需要等待。解决这两个承诺后,响应数据将位于您从 中获取的每个响应对象内部的一个属性中。如果你需要整个响应对象,那么你可以解构它async-awaitPromise.alldataaxios


下面是一个示例


const FetchData = async (): Promise<{ run: string; app: string }> => {

    try {

        const [response1, response2] = await Promise.all([

            axios({

               ...

            }),

            axios({

               ...

            })

        ]);


        return {

          run: response1,

          app: response2

        };


   } catch (error) {

      console.log(error);

   }

};

下面是一个从 json 占位符 API 的 2 个终结点获取数据的演示


查看完整回答
反对 回复 2022-09-16
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您需要更改返回语句的位置:


更新了代码并进行了更改:


const FetchData = (): Promise<{ run: string; app: string }> => {


let aToken:string;

let bToken:string;

// Return the promise here


return Promise.all([

    axios({

      method: 'post',

      url: 'https://oauth2.-arch.mand.com/oauth2/token',

      data: qs.stringify({

        'grant_type': 'client_credentials'

      }, {

        'scope': 'run:crud'

      }),

      headers: {

        'Accept': 'application/json',

        'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',

        'Content-Type': 'application/x-www-form-urlencoded',

      }

    }),

    axios({

      method: 'post',

      url: 'https://oauth2.-arch.mand.com/oauth2/token',

      data: qs.stringify({

        'grant_type': 'client_credentials'

      }, {

        'scope': 'exe:crud'

      }),

      headers: {

        'Accept': 'application/json',

        'Authorization': 'Basic NTgwNjgtMDhhZTczOGNl',

        'Content-Type': 'application/x-www-form-urlencoded',

      }

    })

  ]).then(axios.spread((...responses: AxiosResponse[]) => {

      aToken = responses[0];

      bToken = responses[1];


      // This return is for getting the data once the promise is resolved either with then or await

      return {

         run: aToken ,

         app: bToken

      };

    }).catch(function(error: any) {

       console.log("Error: " + error);

       return error;

    });


)}

由于您在承诺解决之前返回值,因此您不会获得任何数据。您需要返回 promise,然后您需要返回所需的数据,以便在调用函数中解析 promise 后获取。


查看完整回答
反对 回复 2022-09-16
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

const res = await Promist.all([...])

return { run: res[0], app: res[1] }


查看完整回答
反对 回复 2022-09-16
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信