相关疑难解决方法(0)

如何在恢复功能之前等待JavaScript Promise解决?

我正在做一些单元测试.测试框架将页面加载到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)

javascript asynchronous promise

78
推荐指数
3
解决办法
17万
查看次数

标签 统计

asynchronous ×1

javascript ×1

promise ×1