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