Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
被javascript承诺包围的.NET回调函数只在第一次使用时才起作用_Javascript_Jquery - Fatal编程技术网

被javascript承诺包围的.NET回调函数只在第一次使用时才起作用

被javascript承诺包围的.NET回调函数只在第一次使用时才起作用,javascript,jquery,Javascript,Jquery,我们正在Sharepoint 2010内部进行回调,以模拟web服务行为。现在,我已经嵌入了这个标准库,并做出了承诺。问题是它只在第一次起作用。所有后续调用都无法解析新创建的承诺。通过调试,它显示所有后续调用都使用第一个调用的延迟值(deferred.state()已“解析”)。因此,我们产生了以下代码(延迟对象是通过“GetDeferreInstance”获取的,但仍然使用了第一个延迟调用(我们通过在Chrome dubgger中向第一个延迟实例添加属性进行了检查)。代码: 呃,不要将延迟的调

我们正在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();
  }