2016-06-03 3 views
0

Nach der Dokumentation für Ember.run es:Warum wird der Aufruf von ember.run beendet, bevor die von ember.run.later geplante Arbeit abgeschlossen ist?

Führt das übergebene Ziel und Methode innerhalb eines Runloop, um sicherzustellen, jeden verzögerte Aktionen einschließlich Updates Bindungen und Ansichten bei das Ende gespült werden.

und so erwartete ich, dass, wenn ich es in einem Test durchzuführen, wenn die im Test befindlichen Code für einige Arbeit später mit Ember.run.later planen war, die sie vor dem Ember.run Anruf beendet vervollständigen sollen, aber das scheint nicht zu so sein:

test('Ember.run waits for all scheduled actions to finish', function(assert) { 
    assert.expect(2); 
    var done = assert.async(); 
    let isRunLaterThingFinished = false; 
    Ember.run(function() { 
    Ember.run.later(function() { 
     isRunLaterThingFinished = true; 
     assert.ok(true, 'the scheduled thing happened'); 
     done(); 
    }, 1); 
    }); 
    assert.ok(isRunLaterThingFinished, "scheduled actions should have happened by the time ember run finishes"); 
}); 

was zur Folge hat:

Ember.run waits for all scheduled actions to finish 
1. scheduled actions should have happened by the time ember run finishes 
Expected: true 
Result: false 

kann mir jemand erklären, was ich hier fehlt, und wie ich meine Tests warten auf alle geplanten Methoden haben zu beenden, bevor Sie meine behaupten s?

+0

Ich fand eine Ressource, die für mein Verständnis von Glut-Runloops eher aufschlussreich erweist: https://github.com/eoinkelly/ember-runloop-handbook – Bjornicus

Antwort

2

Ember.run.later erstellt eine separate Laufschleife. Was Sie brauchen, ist Ember.run.schedule.

Ember.run(function() { 
    Ember.run.schedule('actions', this, function() { 
     // The code goes here 
    }); 
    }); 

diese Weise Ihre Funktion in der Schleife actions Warteschlange der aktuellen Durchlaufs erhält, und wird vor dem Ende der Schleife ausgeführt werden, wenn die Warteschlange geleert wird.

+0

OK, das macht Sinn, aber was ist, wenn ich wirklich will, dass es läuft später, wie in einigen Sekunden? – Bjornicus

+0

naja, dann solltest du kein Problem damit haben in einer separaten Laufschleife zu laufen –

+0

Sorry, ich meine wenn ich meinen Test warten lassen will bis es fertig ist. Gibt es eine Möglichkeit, meinen Test auf alle Run-Schleifen warten zu lassen, um ihre Arbeit zu beenden? – Bjornicus

Verwandte Themen