如何正确使用promises?

时间:2017-10-19 08:31:21

标签: javascript jquery promise save

  1. 我有一个sharepoint表单,用户填写了一些文本框。

  2. 用户点击“保存”按钮。脚本从这里开始运行。

  3. 检查所有texbox是否已填满。

  4. 如果好,请根据输入从外部列表中获取一些字段,并根据该列表更新其他列表。

  5. 将输入保存为新项目。

  6. 问题:我使用名为PreSaveAction()的函数。当用户点击" Save"按钮,仅当返回true时才会保存表单ll。因此,在使用true返回之前,我应该进行现场检查并列出更新,但我不知道在哪里添加此return true。如果我直接在运行asyncron的PreSaveAction()内添加它,那么在更新完成之前有30-40%的机会返回。我是javascript的新手,所以我需要一些帮助。

    我的简化代码如下所示:

    function PreSaveAction() //This start if the user click on the save button, and create a new item if return with true
    {
      var promresult;
      if(textbox!="")
      {
        //do my staff based on promise like: promresult=promise.then(input textbox, get list field).then(update).then(resolve true, fail false)
        return promresult;  //this run before the update is completed and promresult get value
      }
      else
      {
        return false;  //nothing happens if the textboxes are not filled yet.
      }
    
    }
    

    我读到promises并且我认为我理解它们是如何工作的,但在我的情况下PreSaveAction()有多个功能(检测onclick,做我的东西,返回true / false)。我尝试了几种方法,但是我没有找到解决方案在哪里以及如何从presave返回以等待我的承诺完成?或者我应该使用完全不同的方法?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

function PreSaveAction() //This start if the user click on the save button, and create a new item if return with true
{
  var promresult;
  if(textbox!="")
  {
    //do my staff based on promise like: promresult=promise.then(input textbox, get list field).then(update).then(resolve true, fail false)
    return promresult;  //this run before the update is completed and promresult get value
  }
  else
  {
    return Promise.resolve(false);  //nothing happens if the textboxes are not filled yet.
  }

}

PreSaveAction()
  .then(function(result){
    if (result===false) {
      // this means the textboxes are not filled yet
    } else {
      // result is whatever is returned from promresult
    }
  })