IBM Worklight 5.0.6.1 - 在Client.connect()和invokeProcedure()上的onFailure和onSuccess执行在超时时不是独占的吗?

时间:2013-09-11 17:46:51

标签: ibm-mobilefirst worklight-runtime

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

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

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

这是WL客户端框架的设计和预期行为吗?这是在InfoCenter文档中还是在某处指定的?

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

注意:我们没有使用 connectOnStartup = true 对其进行测试,因为 initOptions 没有提供 onSuccess 过程(因为WL处理了在这种情况下,实现独占执行可能更难。

1 个答案:

答案 0 :(得分:2)

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

您可以使用jQuery.Deferreds获得所需的行为(仅在失败时调用失败回调,并且仅在成功时调用成功回调)。有一些方法可以使用dojoother libraries创建这些延迟对象。但是,我刚刚使用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块中添加应用程序逻辑。

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