在jQuery UI中使用Promise

时间:2019-07-17 11:00:59

标签: jquery promise

我在兑现诺言。我创建了此函数,以便在继续操作之前要求用户提供答复:

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对话框放置,而无需等待用户响应。

该怎么写?

1 个答案:

答案 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...
});