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

从另一个 axios 承诺进行 axios 调用并保存返回的数据

从另一个 axios 承诺进行 axios 调用并保存返回的数据

牛魔王的故事 2022-07-15 09:55:00
我正在从另一个调用的 promise 进行 axios 调用axios,代码如下所示,调用基本上是从第一种方法到第二种方法。基于建议的更新代码 它只是说:不能在异步函数之外使用关键字'await'然后我尝试了var data = async () => {        await this.checkParentLoggerLevel();      };仍然没有工作async updateLevel(logger, level, index) {      alert(index);      axios        .post(          'url'        )        .then(() => {          var data = await this.checkParentLoggerLevel();          alert('waiting');          alert(            'This will be executed before the second methods returns HEllo'          );          alert(data);        });    },第二种方法:async checkParentLoggerLevel() {      alert('inside checkParentLoggerLevel ');      return await axios        .get('url')        .then(() => {          alert('returning hello');          return 'hello';        });    },我的目标是在第一种方法中保存返回hello的数据变量。这是行不通的。另一个问题是在this.checkParentLoggerLevel()方法调用代码执行继续并且不等待返回值之后。
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

发生这种情况是因为你内心checkParentLoggerLevel没有等待axios承诺完成。你可以这样做:


async checkParentLoggerLevel() {

  alert('inside checkParentLoggerLevel ');

  return await axios

    .get('url')

    .then((res) => {

      return 'hello';

    });

}

此外,您需要在内部等待updateLevel:


async updateLevel() {

  axios

    .post(url)

    .then(async (res) => {

      var data = await this.checkParentLoggerLevel();

      alert("This will be executed before the second methods returns HEllo");

      alert(data);

    });

}


查看完整回答
反对 回复 2022-07-15
?
慕少森

TA贡献2019条经验 获得超9个赞

你应该链接承诺,所以:


updateLevel() {

  axios

    .post(url)

    .then(res => {

      return this.checkParentLoggerLevel.then(data => ([res, data]);

    })

    .then(([res, data]) => {

       // here

    });

}

或者简单地使用异步等待:


async updateLevel() {

  const res = await axios.post(url);

  const data = await this.checkParentLoggerLevel();

  // Do whatever you want

}


查看完整回答
反对 回复 2022-07-15
  • 2 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

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