【问题标题】:Calling a function only when another function finishes running in React仅当另一个函数在 React 中完成运行时才调用一个函数
【发布时间】:2016-04-11 06:38:12
【问题描述】:

我有一个遵循 Flux 数据模式的函数,我这样称呼它

UserService.createNewUser(data);

一旦这个创建用户的函数完成执行,我想运行另一个遵循相同数据模式的函数:

NextService.createNewMessage(data);

我该如何设置它,这样NextService 只会在 UserService 完成运行后被调用?

用户存储:

getUser: function() {
    return User;
  },
addChangeListener: function(callback) {
    this.on(CHANGE_EVENT, callback);
  },
  removeChangeListener: function(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  }

听完变化后我打电话给:

if (UserStore.getUser()) {
// in here is where I run NextService.createNewMessage(data); 
}

但是在 createNewUser 完成之前调用 UserStore

【问题讨论】:

  • 嗯,我很难看出你在做什么。你会在哪里调用 .createNew.. 函数?在一个组件中?什么时候?更多细节将帮助我更好地了解您要做什么。

标签: javascript reactjs flux reactjs-flux


【解决方案1】:

如果您遵循通量模式,那么我假设这些服务具有 addChangeListener 函数?如果是这样,我建议在您的组件中添加一个更改侦听器,例如调用 NextService:

class YourComponent extends React.Component{
    constructor(props){
        super(props);
        this._handleStoreChange = this.handleStoreChange.bind(this);
    }
    handleStoreChange(data){
        NextService.createNewMessage(data);
    }
    componentDidMount(){
        UserService.addChangeListener(this._handleStoreChange);
    }
    componentWillUnmount(){
        UserService.removeChangeListener(this._handleStoreChange);
    }
    render(){
        return (
            <h1>hello</h1>
        );
    }
}

【讨论】:

  • 我认为这通常是正确的,是否在组件级别执行将取决于 NextService 调用是否应该始终跟随 UserService 调用或者是否仅在此特定实现中发生。顺便说一句,我想你的意思是componentWillUnmount
  • 我在您的代码中所做的更改不会在创建用户时将data(用户)作为_handleStoreChange 的参数传递。我对handleStoreChange 的建议:handleStoreChange(){ NextService.createNewMessage(UserStore.getUser()); }。并且用户的listener 需要在UserStore 中,而不是在UserService 中(你听商店改变)
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 2021-11-01
  • 2021-11-06
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多