javascript - 如何在返回值之前等待其他事件完成?

标签 javascript angular typescript angular2-services

我有一个 HttpClient 服务,负责处理所有其余调用。 现在,在进行休息调用之前,我想加载一个 iframe,然后继续相同的函数调用。

public get(url, searchParams: URLSearchParams =  new URLSearchParams(), headers: Headers = new Headers() ) {
  if (some condition) {
    let iframe = this.createIframe();
    return new Promise((resolve) =>
      setTimeout(() => {
        iframe.parentNode.removeChild(iframe);
        resolve(this.doGET(url, this.getOptions(searchParams, headers))); 
    }, this.time_delay));
  } else {
    return this.doGET(url, this.getOptions(searchParams, headers));
  }
}

这是 createIframe 方法:

private createIframe() {
    let iframe = document.createElement('iframe');
    iframe.style.display = 'none';
    this.createSomeUrl('').then(function (url) {
         iframe.src = url;
    });
    document.body.appendChild(iframe);
    return iframe;
 }

在这里,我使用 setTimeoutdoGet() 调用等待一段时间,但它并不能保证 iframe 是完成它的工作。

有一个变量会在iframe完成其工作时更新,我可以通过检查该变量知道iframe已完成其工作,但是到那时如何停止 get 方法等待返回 Promise?

最佳答案

已编辑

private checkSomeConditions(): Promise {
    return new Promise( resolve => {
        if (some condition) {
            let iframe = this.createIframe();

            // Assuming the iframe is closing after the job is done
            iframe.onbeforeunload( _ => {
               console.log('iframe is closing');
               resolve();
            });
        } else resolve();
    });
}

public get(url, searchParams: URLSearchParams =  new URLSearchParams(), headers: Headers = new Headers() ) {
    return this.checkSomeConditions()
    .then( _ -> {
        return this.doGET(url, this.getOptions(searchParams, headers);
    })
    [...]
}

关于javascript - 如何在返回值之前等待其他事件完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842978/

相关文章:

javascript - 搜索引号数组时获取 'Undefined' - Javascript

angular - 使用子组件按钮单击关闭 Kendo Angular 对话框

来自不同文件的 html View 中的 Angular 5 和枚举

javascript - 使用 multer-s3-transform 保留原始文件

javascript - Knockout.js:清除选择元素中的选择

javascript - JQuery:使用#[objectId] 或 [id=objectId] 引用元素有什么区别

angular - 如何在 Angular 中检索组件的元数据

angular - CORS 以某种方式阻止了我的 Angular 和 Nestjs 应用程序的通信

javascript - 将数组 toString() 生成的字符串转换回数组

javascript - 如何使用 Promise.all 正确获取 React 应用程序的数据