javascript - jQuery Promise 回调

标签 javascript jquery

在不得不更改我的回调语法以适应 Firefox 限制之后,我遇到了一些奇怪的问题。

标记+执行代码

function List_Add() {
  SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
    var listTitle = 'Quote';
    var propertiesToAdd = [];
    propertiesToAdd.push({
      ID: "Q_ID",
      newval: 1,
    });
    addListItems(listTitle, propertiesToAdd)
      .done(function(items) {
        //Do Heaps of Stuff
      })
      .fail(function(error) {
        console.log(error.get_message());
      });

  });
}

以及被调用来执行此操作的函数

function addListItems(listTitle, propertiesToAdd) {
  var ctx = SP.ClientContext.get_current();
  var web = ctx.get_web();
  var list = web.get_lists().getByTitle(listTitle);
  var listItemCreationInfo = new SP.ListItemCreationInformation();
  var newItem = list.addItem(listItemCreationInfo);
  propertiesToAdd.forEach(function(entry) {
    newItem.set_item(entry.ID, entry.newval);
  });
  newItem.update();
  var d = $.Deferred();
  ctx.executeQueryAsync(function() {
      d.resolve(true);
      return d.promise();
    },
    function(sender, args) {
      d.reject(args);
      return d.promise();
    });
}

通常在函数之外返回 d.promise 会导致异步执行的计时问题。

运行此代码后收到的错误被标记 + 执行抛出

未捕获类型错误:无法读取未定义的属性“完成”

这些值已正确添加到列表中,因此批量工作正常,但 .done 未返回,但因此不允许执行后续代码。

最佳答案

您的 return d.promise(); 需要进入外部函数,而不是内部回调。无论内部异步执行的回调返回什么值,都不会影响外部函数的返回值。

function addListItems(listTitle, propertiesToAdd) {
  // ...

  var d = $.Deferred();
  ctx.executeQueryAsync(function() {
      d.resolve(true);
    },
    function(sender, args) {
      d.reject(args);
    }
  );
  return d.promise();
}

关于javascript - jQuery Promise 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422673/

相关文章:

Jquery select 属性 != 包含没有该属性的元素

javascript - 点击后jquery延迟,允许不同的选择

javascript - 无论子元素如何,强制 div 高度为 0

javascript - 仅在 chrome 中缩放内容时,DIV 变得不可见但仍可点击

javascript - 如何在单击更改按钮时更改表单?

javascript - 创建响应式图像的最简单方法是什么?

javascript - 如何延迟自动隐藏和显示元素

javascript - Angular 资源/解决延迟导致未定义的错误

javascript - Reddit API - API 与附加 .json 和获取首页信息之间的区别

jquery - 动态定位 CSS 对话泡泡的三 Angular 形 ( :before & :after classes) using jQuery