【问题标题】:Wait for axios response before doing anything else在做任何其他事情之前等待 axios 响应
【发布时间】:2021-03-11 18:25:29
【问题描述】:

我的app.js 中有以下功能:

window.SGN = require('./core/core');

SGN.importPermissions();

来自自制包装:

define('SGN',
  ['axios'],
  function (axios) {
    var SGN = {
      importPermissions: () => {
        axios
          .get(`/admin/users/permissions`)
          .then((response) => {
            window.SGN.permissions = Object.values(response.data);
          })
          .catch((error) => {
            console.log(error);
          })
          .then(() => {
          });
      }
    }
    return SGN;
  }
);

但是有时应用程序的其余部分在 axios 请求完成之前运行,我怎样才能使应用程序始终在其他所有操作之前等待请求?


虽然这看起来像是一个重复的问题,但我还没有找到任何可以解决此问题的答案。

【问题讨论】:

    标签: javascript laravel-mix


    【解决方案1】:

    应用程序的其余部分应该在异步请求完成时得到通知。为此,您应该返回您创建的承诺:

    var SGN = {
      importPermissions: () => {
        return axios
    //  ^^^^^^
          .get(`/admin/users/permissions`)
          // ...etc
    

    应用程序的其余部分应该依赖于SGN.importPermissions()返回的promise,所以它可能是这样的:

    SGN.importPermissions().then(() => {
        // Anything that depends on the request should execute here,
        // or be called from here
    });
    

    【讨论】:

    • 遗憾的是,这并没有这样做,因为这是通过应用程序检查的属性列表,我不能只放入 then(() => {}),所以问题仍然存在。跨度>
    • 你必须这样做。您不能指望应用程序的其余部分现在获得未来信息。所以你必须修复你的应用程序的设计。
    • 很遗憾我做不到。我需要找到一种方法来完全停止所有加载,直到该请求结束,然后应用程序才能恢复加载。
    • 不,您不应该完全停止所有加载。那是一种反模式。拥抱异步。有了它,一切皆有可能。
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多