Ibm mobilefirst IBM Worklight 5.0.6.1-在客户端执行onFailure和onSuccess。connect()和invokeProcedure()是否在超时时不独占?

Ibm mobilefirst IBM Worklight 5.0.6.1-在客户端执行onFailure和onSuccess。connect()和invokeProcedure()是否在超时时不独占?,ibm-mobilefirst,worklight-runtime,Ibm Mobilefirst,Worklight Runtime,我们看到了一个令人惊讶的场景,当我们在一个缓慢的网络连接和我们对WL服务器的呼叫超时 这发生在WL.Client.connect上以及invokeProcess上: 我们以10秒的超时执行调用 网络连接很慢,因此呼叫超时 执行与该调用关联的已定义的onFailure过程 WL服务器在超时后以有效响应进行响应 执行与该调用关联的onSuccess过程 这是WL客户端框架的设计和预期行为吗?这是在信息中心文档或其他地方指定的吗 我们团队中的所有开发人员都希望这两个过程是互斥的,我们的代码是基于这

我们看到了一个令人惊讶的场景,当我们在一个缓慢的网络连接和我们对WL服务器的呼叫超时

这发生在WL.Client.connect上以及invokeProcess上:

  • 我们以10秒的超时执行调用
  • 网络连接很慢,因此呼叫超时
  • 执行与该调用关联的已定义的onFailure过程
  • WL服务器在超时后以有效响应进行响应
  • 执行与该调用关联的onSuccess过程
这是WL客户端框架的设计和预期行为吗?这是在信息中心文档或其他地方指定的吗

我们团队中的所有开发人员都希望这两个过程是互斥的,我们的代码是基于这个假设实现的。我们现在正在研究如何将超时/失败响应与成功响应相匹配的选项,以确保在我们的应用程序中独家执行onFailure或onSuccess代码/逻辑


注意:我们没有使用connectOnStartup=true测试这一点,并且由于initOptions没有提供onSuccess过程(因为WL在内部处理),因此在这种情况下,可能更难实现独占执行。

这似乎是预期的行为,但不要引用我的话

您可以使用获得所需的行为(仅在失败时调用失败回调,并且仅在成功时调用成功回调)。使用和可以创建这些延迟对象。但是,我刚刚测试了jQuery的实现,它随IBM Worklight的每个版本一起提供

$(function () {

var WL = {};
WL.Client = {};
WL.Client.invokeProcedureMock = function (options) {
  options.onFailure('failure');
  options.onSuccess('success');
};

var dfd = $.Deferred();

var options = {
  onSuccess: dfd.resolve,
  onFailure: dfd.reject
};

WL.Client.invokeProcedureMock(options);

dfd
  .done(function (msg) {
    // handle invokeProcedure success
    console.log(msg);
  })
  .fail(function (msg) {
    //handle invokeProcedure failure
    console.log(msg);
  });

});
我把上面的代码放在一个,注意,即使我调用onSuccess回调,它也不会有任何效果,因为我已经调用了失败回调(它拒绝了延迟回调)。您可以将应用程序逻辑添加到.done或.fail块中

这只是一个建议,可能有很多方法来解决您的问题