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

Antworten auf die Frage(10)

Ihre Antwort auf die Frage