IBM Worklight 5.0.6.1 - 在 Client.connect() 执行 onFailure 和 on



当我们的网络连接速度较慢并且对 WL 服务器的调用超时时,我们看到了一个令人惊讶的情况。

这发生在 WL。Client.connect 以及 invokeProcedure

  • 我们执行调用,超时为 10 秒
  • 网络连接速度较慢,因此呼叫超时
  • 执行与该调用关联的定义的 onFailure 过程
  • WL 服务器在超时后以有效响应进行响应
  • 执行与该调用关联的 onSuccess 过程

这是 WL 客户端框架的设计和预期行为吗?这是在信息中心文档中指定的还是在某个地方指定的?

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

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

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

您可以使用 jQuery.Deferreds 获取所需的行为(仅在失败时调用失败回调,仅在成功时调用成功回调)。有一些方法可以使用 dojo 和其他库创建这些延迟对象。但是,我刚刚测试了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);
  });
});

我将上面的代码放在 JSFiddle 中,请注意,即使我调用 onSuccess 回调,它也不会产生任何影响,因为我已经调用了失败回调(它拒绝了延迟)。您可以在 .done 或 .fail 块中添加应用程序逻辑。

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

相关内容

最新更新