【发布时间】:2016-02-23 21:49:32
【问题描述】:
我正在尝试为返回承诺的对象运行测试套件。我想将几个动作与它们之间的短暂超时链接在一起。我认为返回 promise 的“then”调用会等待 promise 完成,然后再触发下一个链式 then 调用。
我创建了一个函数
function promiseTimeout (time) {
return new Promise(function(resolve,reject){
setTimeout(function(){resolve(time);},time);
});
};
尝试将 setTimeout 包装在 Promise 中。
然后在我的测试套件中,我正在调用这样的东西......
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();
});
});
我可以在第一个 xh.fire 调用上放置一个断点,在 xu.fire 调用上放置第二个断点,并且当 a 从第一个断点继续到第二个断点时,我预计会有两秒的间隙。
而是立即到达第二个断点,此时t的值是未定义的。
我做错了什么?
【问题讨论】:
-
你所做的类似于
setTimeout(fn(), 1000)而不是setTimeout(fn, 1000),then采用的是一个返回承诺而不是承诺的函数。 -
另外,你可以从
it中得到return的promise,不需要使用done -
不明白你的意思我只是将 setTimout 调用更改为
setTimeout(resolve,time,time);但这并没有改变任何东西。
标签: javascript promise