gpt4 book ai didi

jquery - 为什么在调用 JSOMexecuteQueryAsync 时我的 jQuery Promises 被忽略?

转载 作者:行者123 更新时间:2023-12-01 04:54:03 25 4
gpt4 key购买 nike

我对 jQuery Promises 的一个小问题感到摸不着头脑。基本上,我试图链接多个方法调用(在插件中保存),以便按顺序调用它们。

但是,因为其中一个函数具有 SP context.executeQueryAsync 调用,所以当我尝试此操作时,它们似乎是通过 final方法调用的,而不是在继续之前等待 promise 的已解决状态。

我在下面的 jsFiddle 中复制了类似于我使用超时所做的事情:

http://jsfiddle.net/qPHmu/11/

以下是使用executeQueryAsync 调用的方法的基本版本:

GetList: function (listTitle, fields, camlXml) {
var dfd = new $.Deferred();
$this = $(this);

var data = $this.data('SPLists');

if (!data) {
var list = web.get_lists().getByTitle(listTitle);
var query = new SP.CamlQuery(camlXml);
var items = list.getItems(query);

context.load(items, 'Include (' + fields + ')');
context.executeQueryAsync(function () {
dfd.resolve();
},
function (sender, args) {
dfd.reject();
});
}

return dfd.promise();
}

我以与 jsfiddle 示例相同的方式调用我的函数。任何帮助将不胜感激!

最佳答案

以下内容不会等待执行 MyPromiseTest 函数:

$.fn.MyPromiseTest()
.done($.fn.MyPromiseTest("Get"))
.done($.fn.MyPromiseTest("Final"));

尝试一下 like this :

$.fn.MyPromiseTest()
.done(function() {
return $.fn.MyPromiseTest("Get").done(function() {
return $.fn.MyPromiseTest("Final");
})
});

编辑:

您还可以使用.pipe更新 promise (从 1.8 开始,您应该使用 .then ):

$.fn.MyPromiseTest()
.pipe(function() { return $.fn.MyPromiseTest("Get"); })
.pipe(function() { return $.fn.MyPromiseTest("Final"); });

参见http://jsfiddle.net/qPHmu/13/

关于jquery - 为什么在调用 JSOMexecuteQueryAsync 时我的 jQuery Promises 被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16188300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com