我在兑现诺言。我创建了此函数,以便在继续操作之前要求用户提供答复:
function dialogConfirm(msg, title) {
promises = [];
$('#dialog_yesno').html(msg).dialog({
modal: true,
title: title,
buttons: {
'Yes': function() {
promises.push(true);
$(this).dialog("close");
},
'No': function() {
promises.push(false);
$(this).dialog("close");
}
}
});
return promises;
}
这样称呼:
var msg = 'The record has been changed [etc] ...';
dialogConfirm(msg, 'Query').then(function(retVal) {
if(retVal) {
$('#save').trigger('click');
}
});
该代码通过UI对话框放置,而无需等待用户响应。
该怎么写?
答案 0 :(得分:1)
您推送到true
数组中的promises
不是异步操作,因此逻辑同步继续。
我从问题的上下文中假设您要从dialog()
返回一个诺言,当单击按钮时该诺言会解决?如果是这样,您需要手动创建Promise
并在点击处理程序中解决它,如下所示:
function dialogConfirm(msg, title) {
return new Promise(function(resolve, reject) {
$('#dialog_yesno').html(msg).dialog({
modal: true,
title: title,
buttons: {
'Yes': function() {
$(this).dialog("close");
resolve();
},
'No': function() {
$(this).dialog("close");
reject();
}
}
});
});
}
dialogConfirm(msg, 'Query').then(function() {
// 'yes' was clicked...
$('#save').trigger('click');
}).catch(function() {
// 'no' was clicked...
});