Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从多个组件调用的多个axios请求中检索状态_Javascript_Reactjs_Axios_Redux_Mufa - Fatal编程技术网

Javascript 从多个组件调用的多个axios请求中检索状态

Javascript 从多个组件调用的多个axios请求中检索状态,javascript,reactjs,axios,redux,mufa,Javascript,Reactjs,Axios,Redux,Mufa,我的应用程序中有一种仪表板。在这个仪表板中,我让用户放置许多小部件,每个小部件都是一个类组件。每个小部件呈现不同的内容,例如图表、图像和文本。当我显示它时,每个小部件都会调用axios从后端检索数据。我需要一种能够告诉所有请求何时完成的方法,这样我就可以完全呈现HTML,稍后我将使用HiqPdf导出它 我需要每个小部件是独立的,这样我就可以在其他组件中使用。这就是为什么每个小部件都有自己的axios调用。否则,我认为我可以在我的小部件之上的单个组件中进行许多axios调用,然后将所有数据作为道具

我的应用程序中有一种仪表板。在这个仪表板中,我让用户放置许多小部件,每个小部件都是一个类组件。每个小部件呈现不同的内容,例如图表、图像和文本。当我显示它时,每个小部件都会调用axios从后端检索数据。我需要一种能够告诉所有请求何时完成的方法,这样我就可以完全呈现HTML,稍后我将使用HiqPdf导出它

我需要每个小部件是独立的,这样我就可以在其他组件中使用。这就是为什么每个小部件都有自己的axios调用。否则,我认为我可以在我的小部件之上的单个组件中进行许多axios调用,然后将所有数据作为道具传递给每个小部件。但是,没有。。。axios调用必须位于每个小部件内。 我发现很多地方都在谈论承诺,但每个例子都展示了如何在单个组件中实现承诺


我之所以研究它,是因为我需要使用库调用HiqPdf导出它。此库接收HTML作为字符串并导出为PDF。因此,我需要知道仪表板何时已完全加载,以允许应用程序将其导出。

考虑一个事件驱动框架,该框架将保持单页应用程序的全局状态,并在状态发生变化时通知订阅者

其中一个著名的框架是

另一个简单的框架是。以下是一些类似的问题:

对于您的情况,可能是这样的:

const all_calls = [];
const {on, one, fire, unsub} = mufa;

axios.get('call1').then((data) => {

   fire('call1_received', data);
})


axios.get('call2').then((data) => {

   fire('call2_received', data);
});


one('call1_received', () => {
  all_calls.push('call1_received');
  if (all_calls.length === 2) {
     alert('!!!! All calls have been received')
  }

})

one('call2_received', () => {
  all_calls.push('call2_received');
  if (all_calls.length === 2) {
     alert('!!!! All calls have been received')
  }

})

注意,将只订阅一次。。在网上永远订阅

当用户创建仪表板时,它是实时的吗?如中所示,您是否有带有保存按钮的编辑仪表板视图,或者在添加小部件时是否立即一次性执行请求?我有两种情况。用户可以编辑或仅显示仪表板。但是,它是同一个组件。不同之处在于,在编辑模式下,用户可以放置新的小部件,或者将它们放置在其他位置。因此,在这两种情况下,我都会调用axios。如果我不知道我将要调用多少axios呢?因为在我的仪表板中,用户可以添加任意数量的小部件,所以我需要在添加之前进行计数,对吗?请看看这种方法是否是一种好的做法。如果我计算仪表板中的小部件数量,并将其存储在redux中,会怎么样?这将是我开始导出过程时要做的第一件事。在存储它之后,我将进行处理,每个小部件在完成请求后将在redux中增加一个int变量。最后,当widget的数量等于int变量时,我启用了导出选项。@ArthurMedeiros计数不是一个好方法,除非您有一个可以管理数据的构造函数。假设您有5个承诺,然后在这些承诺尚未解决时编辑一个小部件。现在您有6个不同的异步调用。无论哪一个先完成,即使不正确,都将传播。