当我们处于慢速网络连接并且我们对WL服务器的调用超时时,我们看到了一个令人惊讶的情况。
这发生在 WL.Client.connect 以及 invokeProcedure :
这是WL客户端框架的设计和预期行为吗?这是在InfoCenter文档中还是在某处指定的?
我们团队的所有开发人员都希望这两个程序是独占的,我们的代码是基于这个假设实现的。我们现在正在研究如何将超时/失败响应与成功响应相匹配的选项,以确保我们在应用程序中实现onFailure或onSuccess代码/逻辑的独占执行。
注意:我们没有使用 connectOnStartup = true 对其进行测试,因为 initOptions 没有提供 onSuccess 过程(因为WL处理了在这种情况下,实现独占执行可能更难。
答案 0 :(得分:2)
这似乎是预期的行为,但不要引用我。
您可以使用jQuery.Deferreds获得所需的行为(仅在失败时调用失败回调,并且仅在成功时调用成功回调)。有一些方法可以使用dojo和other 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块中添加应用程序逻辑。
这只是一个建议,可能有很多方法可以解决您的问题。