被javascript承诺包围的.NET回调函数只在第一次使用时才起作用
我们正在Sharepoint 2010内部进行回调,以模拟web服务行为。现在,我已经嵌入了这个标准库,并做出了承诺。问题是它只在第一次起作用。所有后续调用都无法解析新创建的承诺。通过调试,它显示所有后续调用都使用第一个调用的延迟值(deferred.state()已“解析”)。因此,我们产生了以下代码(延迟对象是通过“GetDeferreInstance”获取的,但仍然使用了第一个延迟调用(我们通过在Chrome dubgger中向第一个延迟实例添加属性进行了检查)。代码:被javascript承诺包围的.NET回调函数只在第一次使用时才起作用,javascript,jquery,Javascript,Jquery,我们正在Sharepoint 2010内部进行回调,以模拟web服务行为。现在,我已经嵌入了这个标准库,并做出了承诺。问题是它只在第一次起作用。所有后续调用都无法解析新创建的承诺。通过调试,它显示所有后续调用都使用第一个调用的延迟值(deferred.state()已“解析”)。因此,我们产生了以下代码(延迟对象是通过“GetDeferreInstance”获取的,但仍然使用了第一个延迟调用(我们通过在Chrome dubgger中向第一个延迟实例添加属性进行了检查)。代码: 呃,不要将延迟的调
呃,不要将延迟的调用存储在
self
(这样会与其他调用冲突),但只是通过闭包来引用它?是的,原因是我在玩弄代码以使其工作。这是我的上一个版本,使用self。我的第一个版本没有使用self存储它,但这也不起作用。请你也发布一下,好吗?我忘了回答这句话。解决方法是存储对它的每个调用s函数在一个提供了唯一键的数组中。因此,doCall开头的setDeferred(key,deferred)和onSuccess和onError执行getDeferred(key)。
self.doCall = function () {
self.deferred = $.Deferred();
self.getDeferredInstance = function() {return self.deferred;}
self.onSuccess = function(result) {
var instance = self.getDeferredInstance();
instance.resolve(result);
}
self.onError = function() {
var instance = self.getDeferredInstance();
instance.reject();
}
apicontrol.doRequest("Api." + self.serviceName + "." + self.operationName, JSON.stringify(self.data), self.onSuccess, self.onError);
return self.deferred.promise();
}