我正在做一些单元测试.测试框架将页面加载到iFrame中,然后针对该页面运行断言.在每个测试开始之前,我创建一个Promise设置iFrame的onload事件来调用resolve(),设置iFrame src,并返回promise.
所以,我可以调用loadUrl(url).then(myFunc),它会在执行任何myFunc操作之前等待页面加载.
我在我的测试中使用这种模式(不只是用于加载URL),主要是为了允许更改DOM(例如模仿单击按钮,等待div隐藏和显示).
这种设计的缺点是我不断编写匿名函数,其中包含几行代码.此外,虽然我有一个解决方法(QUnit assert.async()),但定义promise的测试函数在promise运行之前就完成了.
我想知道是否有任何方法可以从a Promise或等待(块/睡眠)获取值,直到它已解决,类似于.NET IAsyncResult.WaitHandle.WaitOne().我知道JavaScript是单线程的,但我希望这并不意味着函数不能产生.
从本质上讲,有没有办法让以下方法以正确的顺序吐出结果?
function kickOff() {
return new Promise(function(resolve, reject) {
$("#output").append("start");
setTimeout(function() {
resolve();
}, 1000);
}).then(function() {
$("#output").append(" middle");
return " end";
});
};
function getResultFrom(promise) {
// todo
return " end";
}
var promise = kickOff();
var result = getResultFrom(promise);
$("#output").append(result);Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>Run Code Online (Sandbox Code Playgroud)