如何将嵌套的 context.executeQueryAsync 与 Deferred 一起使用?下面是我的代码,我将解释我到底在寻找什么:
代码
function getValues() {
var dfd = $.Deferred(function () {
context.executeQueryAsync(function () {
var navigationItem = [];
// First Loop
while (termEnumerator.moveNext()) {
// Push Parent Terms in navigationItem array
navigationItem.push({ "name": ""});
// Get Sub Terms
context.executeQueryAsync(function () {
// Second Loop
while (termsEnum.moveNext()) {
// Push Sub Terms in navigationItem array
navigationItem.push({ "name": ""});
}
}, function (sender, args) {
console.log(args.get_message());
});
}
dfd.resolve(navigationItem);
}, function (sender, args) {
console.log(args.get_message());
dfd.reject(args.get_message());
});
});
return dfd.promise();
}
基本上,我正在尝试使用上述代码结构在 SharePoint Online 中获取分类法(术语及其子术语)。最初,我创建了一个名为navigationItem
并遍历所有术语的数组。
在迭代过程中,首先,我将术语推入该数组,并且与此一起,我还将获取它的子术语(如果有)并将其推入同一个数组。
我希望该代码在第二个循环完成执行之前不会进一步执行。这样我将拥有最终数组,同时将其返回到另一个函数。