Wie verpackst du setTimeout in ein Versprechen?
Ich versuche, eine Testsuite für ein Objekt auszuführen, das ein Versprechen zurückgibt. Ich möchte mehrere Aktionen mit kurzen Timeouts miteinander verketten. Ich dachte, dass ein "Dann" -Aufruf, der ein Versprechen zurückgab, darauf warten würde, dass das Versprechen erfüllt wird, bevor der nächste angekettete Dann-Aufruf ausgelöst wird.
Ich habe eine Funktion erstellt
function promiseTimeout (time) {
return new Promise(function(resolve,reject){
setTimeout(function(){resolve(time);},time);
});
};
versuchen, setTimeout in ein Versprechen zu packen.
Dann rufe ich in meiner Testsuite so etwas an ...
it('should restore state when browser back button is used',function(done){
r.domOK().then(function(){
xh.fire('akc-route-change','/user/4/profile/new');
}).then(promiseTimeout(2000)).then(function(t){
xu.fire('akc-route-change','/user/6');
}).then(promiseTimeout(10)).then(function(t){
expect(xu.params[0]).to.equal(6);
history.back();
}).then(promiseTimeout(10)).then(function(){
expect(xu.params[0]).to.equal(4);
done();
});
});
Ich kann einen Haltepunkt auf dem ersten @ setzxh.fire
Anruf und eine zweite auf demxu.fire
call und hätte eine Lücke von zwei Sekunden erwartet, wenn a vom ersten zum zweiten Haltepunkt fortgesetzt wird.
Instead erreicht es sofort den zweiten Haltepunkt und den Wert vont
ist zu diesem Zeitpunkt undefiniert.
Was mache ich falsch