2016-06-14 7 views
0

В родительском компоненте, я следующее:Как обеспечить ребенку компонент вызывает родительскую функцию после Ember.run.later завершается в Эмбер

. 
. 
. 
recurringFunc: function(delay, index){ 
    . 
    . 
    . 
    if (someFlag){ 
    Ember.run.later(_this, function() { 
     _this.send('otherFunc',{index: index}); 
     _this.send('recurringFunc', delay, ++index); 
    }, delay); 
    } 
}, 


otherFunc: function(somePara){ 
    . 
    . 
    . 
} 

В родительском шаблоне я следующее:

. 
. 
. 
{{template-name someFlag=someFlag}} 
. 
. 
. 

Тогда в детском componoent у меня есть следующие:

input: function(){ 
    this.set('someFlag', false); 
    this.sendAction('otherFunc', {index: someVal}); 
} 

Когда действие, если уволен из дочерний компонент, он успешно, изменяет someFlag в родительском. Но код не дождался последней итерациив родительском для запуска, прежде чем он выполнит вызов otherFunc, который был инициирован из дочернего.

У меня есть другой код, который я сократил, что зависит от otherFunc, запущенного после последней итерации Ember.run.later.

Как вызвать функцию родительского компонента из дочернего компонента и убедиться, что Ember.run.later закончен до того, как вызывается дочерняя функция?

+0

Что это связано с асинхронным ожиданием? Вы даже используете ES8? Какие функции возвращают обещания? – Bergi

+0

Извините. Я думал, что асинхронное ожидание означает что-то еще. Я удалю этот тег. – user2517182

ответ

0

Для всех, кто сталкивается с этой проблемой, это то, что я сделал.

Я сделал delay свойство в родительском компоненте и обновляется otherFunc в родительском компоненте следующим образом:

otherFunc: function(somePara){ 
    var currentDelay = this.get('delay'); 
    Ember.run.later(_this, function() { 
    . 
    . 
    . 
    . 
    }, currentDelay); 
} 

Это будет вызывать новые инструкции после того, как последняя задержка закончена из recurringFunc.