然后方法未在promise.resolve()之后发射



在Ionic2中,我正在尝试设计一种JavaScript方法,该方法将打开模态WebView,让用户输入一些数据,然后在关闭模态WebView时应发出回调。<<<<<<<<<<<<<<<<<<<<<<<</p>

我正在尝试使用承诺来实现这一目标。

这是计划:

var openWebviewPromise:any;
this.openWebview(path).then(()=>{
  //this line after then is never fired!
  console.log("do something when webview is closed");
});
openWebview = (path:string) => {
  // do something to listen to webview closed even
  this.openWebviewPromise = new Promise((resolve, reject) => {
    // open the modal webview here.
  });
  return this.openWebviewPromise;
}
// Then I listen to event when the modal iframe is closed manually by user, I tried to call .resolve when that happens, hoping then() will be called.
window.addEventListener('message', this.formCloseEventHandler);
formCloseEventHandler = (event:any) =>{
  if(event.data == "embed-auto-close-popup"){
    if(this.openWebviewPromise !== undefined){
      this.openWebviewPromise.resolve();
    }
  }
}

它不起作用。当模态关闭时,我们会触发this.openwebviewpromise.resolve((,但不会触发当时的行。

你应该写

openWebview(path:string) {
  return new Promise((resolve, reject) => {
    … // open the modal webview here.
    … // do something to listen to webview closed even and call resolve()
    // Listen *here* to event when the modal iframe is closed manually by user
    window.addEventListener('message', (event:any) => {
      if (event.data == "embed-auto-close-popup") {
        resolve(); // or reject(new Error(…));
      }
    });
  });
}

最新更新