Javascript 材料设计-确认对话框-如何使用Dialog.listen方法中的承诺?
在应用程序中执行重要操作之前,我将向客户端呈现MD确认对话框。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文档实现此功能的方法是使用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()
函数将函数转换为承诺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也自动将“错误优先回调模式”转换为承诺。