为了适应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会导致异步执行的时序问题。
运行此代码后,我收到的错误引发了标记+执行
未捕获的TypeError:无法读取未定义的属性“完成”
这些值已正确添加到列表中,因此批量工作正常,尽管未返回.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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句