dialog.showMessageBox 不返回电子 main.js 中的按钮索引

Wah*_*Feb 4 javascript dialog messagebox callback electron

我有一个消息框,当用户在dashboardWindow 上单击关闭时将打开该消息框(Windows 操作系统右上角的 X 按钮)

dashboardWindow.on("close", (event) => {
    event.preventDefault();
    console.log("before message box");
    dialog.showMessageBox(
      dashboardWindows,
      {
        message: "Test",
        buttons: ["Default Button", "Cancel Button"],
        defaultId: 0, // bound to buttons array
        cancelId: 1 // bound to buttons array
      },
      (response) => {
        if (response === 0) {
          // bound to buttons array
          console.log("Default button clicked.");
        } else if (response === 1) {
          // bound to buttons array
          console.log("Cancel button clicked.");
        }
      }
    );
    console.log("after message box");
  });
}
Run Code Online (Sandbox Code Playgroud)

当我关闭 dashboardWindow 时消息框打开,但我无法开始response === 0工作。console.log("after message box");即使没有点击按钮,Samehow 也已经运行。我如何使响应起作用(messageBox 上的返回索引按钮)?

登录窗口关闭

Jos*_*ker 14

请参考关于dialog.showMessageBox 的最新 API 文档:此方法返回一个 Promise 对象并且不再使用回调函数,就像在 Electron v5.xx 之前一样

返回Promise<Object>- 使用包含以下属性的承诺解析:

  • response Number - 单击按钮的索引。
  • checkboxCheckedBoolean - 如果checkboxLabel设置了复选框的选中状态。否则false

这应该可以工作(尽管在您的上下文中未经测试):

dashboardWindow.on("close", (event) => {
    event.preventDefault();
    console.log("before message box");
    dialog.showMessageBox(
      dashboardWindows,
      {
        message: "Test",
        buttons: ["Default Button", "Cancel Button"],
        defaultId: 0, // bound to buttons array
        cancelId: 1 // bound to buttons array
      })
      .then(result => {
        if (result.response === 0) {
          // bound to buttons array
          console.log("Default button clicked.");
        } else if (result.response === 1) {
          // bound to buttons array
          console.log("Cancel button clicked.");
        }
      }
    );
    console.log("after message box");
  });
Run Code Online (Sandbox Code Playgroud)