Javascript 然后在Promise.resolve()之后未激发方法

Javascript 然后在Promise.resolve()之后未激发方法,javascript,ecmascript-6,Javascript,Ecmascript 6,在Ionic2中,我试图设计一个javascript方法,该方法将打开一个模态webview,让用户输入一些数据,然后在模态webview关闭时触发回调 我正试图用承诺来实现这一点 计划如下: var openWebviewPromise:any; this.openWebview(path).then(()=>{ //this line after then is never fired! console.log("do something when webview is cl

在Ionic2中,我试图设计一个javascript方法,该方法将打开一个模态webview,让用户输入一些数据,然后在模态webview关闭时触发回调

我正试图用承诺来实现这一点

计划如下:

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();
    }
  }
}
它不起作用。当modal关闭时,我们触发此.openWebviewPromise.resolve(),但不会触发then行

你应该在写作

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(…));
      }
    });
  });
}

你不在匿名函数中调用
resolve()
吗?在这个特定的代码中
this.openWebview
openWebview
是(应该是)两个不同的东西
this.openWebviewPromise.resolve
不应存在/不应是函数。你不能从外面解决一个承诺。啊,我明白了。。。。所以我不能在外面解决,当一件事发生。。。