Javascript在数据更新后立即运行函数?

Javascript在数据更新后立即运行函数?,javascript,promise,listener,es6-promise,setinterval,Javascript,Promise,Listener,Es6 Promise,Setinterval,因此,当我的web应用程序打开时,组件A进行api调用,调用的结果存储在某个地方。还有另一个javascript组件B需要该变量的值。B如何在数据更新后立即访问变量。目前,我不得不求助于在B中添加setInterval函数来持续监听变量值的变化,但我希望找到更好的解决方案。承诺会有帮助吗?任何帮助都将不胜感激。 注意:部件A和部件B未连接。组件A无法调用组件B的方法/数据,因此必须将数据保留在第三位。您可以让B调用A方法并等待其结束 wait A() 异步函数A(){ //…事情 返回数据 }

因此,当我的web应用程序打开时,组件A进行api调用,调用的结果存储在某个地方。还有另一个javascript组件B需要该变量的值。B如何在数据更新后立即访问变量。目前,我不得不求助于在B中添加setInterval函数来持续监听变量值的变化,但我希望找到更好的解决方案。承诺会有帮助吗?任何帮助都将不胜感激。
注意:部件A和部件B未连接。组件A无法调用组件B的方法/数据,因此必须将数据保留在第三位。

您可以让B调用A方法并等待其结束

wait A()
异步函数A(){
//…事情
返回数据
}
您还可以处理事件,方法是B将回调函数传递给a,a在完成后注册并调用它

let callback=null
函数AReady(cb){callback=cb}
异步函数A(){
//…事情
if(回调)回调(数据)
}

如果他们根本没有任何联系,你需要建立一个。如果它们是模块,则可以导出
AReady
。如果它们在窗口上,您需要设置
window.AReady=AReady
,使用该方法(同样,B需要在A之后加载,或者等待
文档准备就绪)

是的,承诺可以帮助,只需在两个组件中使用async/await即可。

某种全局通知系统可以工作。您可以使用一些流行的第三方软件包,例如,但是您也可以自己实现一个简单的版本

下面是一个如何工作的示例:

// Inside component B

// at startup
PubSub.subscribe('data from A', function(_, data) {
  // do stuff with data
});

某种类型的事件侦听器解决方案可能会起作用。他们没有任何联系?它们是什么?导入的模块?它们存储在window/global上?需要更多信息。如果它们在同一浏览器窗口上运行,它们可以建立连接,问题是,应用程序是如何组织的,以使用最佳连接。从OP:“组件A和组件B未连接。组件A无法调用组件B的方法/数据,因此必须将数据保留在第三位。”@FelixKling我不明白你是说B应该调用A,但OP说这些组件之间没有连接,所以这可能不起作用。@FelixKling什么是OP,为什么它不起作用?怎么了?OP代表“原创帖子”或“原创海报”。我只是指问题中包含的信息。
// Inside component A

// load data, then
Pubsub.publish('data from A', data);