Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 材料设计-确认对话框-如何使用Dialog.listen方法中的承诺?_Javascript_Promise_Material Design - Fatal编程技术网

Javascript 材料设计-确认对话框-如何使用Dialog.listen方法中的承诺?

Javascript 材料设计-确认对话框-如何使用Dialog.listen方法中的承诺?,javascript,promise,material-design,Javascript,Promise,Material Design,在应用程序中执行重要操作之前,我将向客户端呈现MD确认对话框。 我只想在用户单击“确认”按钮时执行特定操作。 MD文档实现此功能的方法是使用dialog.listen()方法。 现在,我正在发送一个回调函数,并仅在操作为“确认”时执行它。 我的代码: const showConfirmationDialog = callbackFunc => { const dialog = new MDCDialog(document.querySelector('.mdc-dialog'));

在应用程序中执行重要操作之前,我将向客户端呈现MD确认对话框。
我只想在用户单击“确认”按钮时执行特定操作。
MD文档实现此功能的方法是使用dialog.listen()方法。
现在,我正在发送一个回调函数,并仅在操作为“确认”时执行它。
我的代码:

const showConfirmationDialog = callbackFunc => {
    const dialog = new MDCDialog(document.querySelector('.mdc-dialog'));

    dialog.open();

    dialog.listen('MDCDialog:closed', e => {
        if (e.detail.action === 'confirm') callbackFunc();
      });
};
showConfirmationDialog()和callBackFunc()函数放在不同的文件中。
使用回调是可以的,但是在这种情况下有没有办法使用承诺?
比如:

import showConfirmationDialog from '...';

const functionToExecute = () => {
   // Something in here
};

showConfirmationDialog()
    .then(() => functionToExecute());
编辑:我尝试过这样做,但没有成功:

        if (e.detail.action === 'confirm') return Promise.resolve();

您需要在
showConfirmationDialog
函数中返回承诺。您有两种选择:

  • 在职能部门内部履行承诺,根据成功或失败案例解决或拒绝问题
  • 使用
    promisify()
    函数将函数转换为承诺
  • 第二个选项只有在函数使用“错误优先回调模式”时才可能出现。与回调(error,obj)类似,promisify将其转换为Promise实现

    下面是直接实现承诺的代码,只需将回调更改为承诺:

    const showConfirmationDialog = () => {
      const dialog = new MDCDialog(document.querySelector('.mdc-dialog'));
    
      return new Promise((resolve, reject) => {
        dialog.open();
        dialog.listen('MDCDialog:closed', e => {
          if (e.detail.action === 'confirm') {
            resolve();
          } else {
            reject();
          }
        });
      });
    };
    
    ----编辑----

    在您的案例中,错误优先回调模式的提示可能如下所示:

    const showConfirmationDialog = callbackFunc => {
      const dialog = new MDCDialog(document.querySelector('.mdc-dialog'));
    
      dialog.open();
    
      dialog.listen('MDCDialog:closed', e => {
        if (e.detail.action === 'confirm') callbackFunc();
        else callbackFunc();
      });
    };
    
    const showConfirmationDialogPromise = Promise.promisify(showConfirmationDialog);
    
    showConfirmationDialogPromise()
      .then(() => console.log('promise work'));
    

    履行承诺是最好的办法。见下面我的答案。如果您愿意,您可以promisify也自动将“错误优先回调模式”转换为承诺。