ServiceRequestWrapper:
A simple class that provides common service Mojo.Service.Request lifetime management logic,
primarily this prevents garbage collection of request objects and their associated callbacks.
Install:
- Move service-request-wrapper.js into application source tree.
- Include service-request-wrapper.js via sources.json
Usage:
- Call ServiceRequestWrapper.request in place of all new Mojo.Service.Request calls.
Note that this wrapper will cleanup non-subscription requests. If a requests is made
as a subscription, the caller must explicitly call the cancel object for the given
request or the request object will remain in the heap until the application closes.
var ServiceRequestWrapper;
(function() {
var requestId = 0,
requests = [];
function completeHandler(optionsIn, requestId) {
return function(response) {
if (!(optionsIn.parameters && optionsIn.parameters.subscribe) && requests[requestId]) {
requests[requestId].cancel();
}
optionsIn.onComplete && optionsIn.onComplete(response);
};
}
function cancelHandler(requestId, original) {
return function() {
delete requests[requestId];
original.apply(this, arguments);
};
}
ServiceRequestWrapper = {
/**
* Initiates a request to the
*/
request: function(url, optionsIn, resubscribe) {
requestId++;
var options = this.bindOptions(url, optionsIn, requestId),
request = new Mojo.Service.Request(url, options, resubscribe);
request.cancel = cancelHandler(requestId, request.cancel);
requests[requestId] = request;
return request;
},
bindOptions: function(url, optionsIn, requestId) {
var options = Object.clone(optionsIn);
options.onComplete = completeHandler(optionsIn, requestId);
return options;
}
};
})();
测试类
function ServiceRequestWrapperTest() {}
ServiceRequestWrapperTest.prototype.exec = function(assistant, cont) {
execChain(assistant, cont, [
this.singleSuccessTest,
this.singleFailureTest,
this.subscriptionSuccessTest,
this.subscriptionFailureTest
], 0)();
};
ServiceRequestWrapperTest.prototype.singleSuccessTest = function(assistant, cont) {
var success,
request = ServiceRequestWrapper.request('palm://com.palm.preferences/systemProperties', {
method:"Get",
parameters:{"key": "com.palm.properties.nduid" },
onSuccess: function(response){
success = true;
},
onComplete: function(response) {
if (!success) {
assistant.failure("Did not recieve success event");
}
if (!request.cancelled) {
assistant.failure("Request not cancelled");
}
cont();
}
});
};
ServiceRequestWrapperTest.prototype.singleFailureTest = function(assistant, cont) {
var failure,
request = ServiceRequestWrapper.request(
"palm://com.palm.preferences/systemProperties", {
onFailure: function(response) {
failure = true;
},
onComplete: function(response) {
if (!failure) {
assistant.failure("Failure not recieved");
}
if (!request.cancelled) {
assistant.failure("Request not cancelled");
}
cont();
}
});
};
ServiceRequestWrapperTest.prototype.subscriptionSuccessTest = function(assistant, cont) {
var sub, secondSet;
function subComplete() {
if (sub.cancelled) {
assistant.failure("Request cancelled");
}
if (!secondSet) {
secondSet = true;
ServiceRequestWrapper.request('palm://com.palm.systemservice', {
method:"setPreferences",
parameters:{"food":"beef"},
onFailure: failure
});
} else {
sub.cancel();
if (!sub.cancelled) {
asssiant.failure("Requets not cancelled");
}
cont();
}
}
function failure() {
assistant.failure("Failure event");
cont();
}
ServiceRequestWrapper.request('palm://com.palm.systemservice', {
method:"setPreferences",
parameters:{"food":"pizza"},
onSuccess: function() {
sub = ServiceRequestWrapper.request('palm://com.palm.systemservice', {
method:"getPreferences",
parameters:{ keys: [ "food" ], subscribe: true },
onFailure: failure,
onComplete: subComplete
});
},
onFailure: failure
});
};
ServiceRequestWrapperTest.prototype.subscriptionFailureTest = function(assistant, cont) {
var failure,
request = ServiceRequestWrapper.request(
"palm://com.palm.preferences/systemProperties", {
subscribe: true,
onFailure: function(response) {
failure = true;
},
onComplete: function(response) {
if (!failure) {
assistant.failure("Failure not recieved");
}
if (!request.cancelled) {
assistant.failure("Request not cancelled");
}
cont();
}
});
};
分享到:
相关推荐
在提供的压缩包文件"**C#系统封装并调用**"中,很可能包含了实际的C#代码示例,这些示例可能演示了如何创建自定义的类,封装了一些系统功能,并提供了调用这些封装功能的方法。通过下载并分析这些源码,你可以更深入...
在探讨“Eclipse中Android源代码—点击系统封装的方法可以看到源代码”这一主题时,我们首先需要理解几个关键概念:Eclipse集成开发环境(IDE)、Android操作系统、源代码以及系统封装的方法。 ### Eclipse IDE ...
提供完整的html5页面开发流程和开发方式,包括html5页面开发代码,含ajax封装方法,以及调用的方式
本资源提供的"sqlite3 dll源代码 静态库源代码 封装包源代码"是SQLite3数据库引擎的源码,适用于VC6开发环境,对于学习数据库系统内部工作原理以及C/C++编程者来说,这是一个非常宝贵的参考资料。 SQLite3的源代码...
用友U9ERP 请购单 ISV 封装调用源代码 C#版本,请购单创建,提交,审核
总的来说,这个图书管理系统jsp源代码项目是一个实用的学习资源,有助于深入理解和实践Web应用开发,特别是JSP、Servlet和数据库管理方面的知识。通过对源代码的分析和调试,不仅可以巩固理论知识,还能提升实际编程...
1. **WCF服务**:利用Windows Communication Foundation(WCF),可以创建一个服务,将DLL功能暴露为服务接口,实现跨进程甚至跨机器的调用。 2. **Remoting**:.NET Remoting是另一种跨进程通信方式,可以调用远程...
【标题】中的“源代码-AJAX类,调用方式类似jQuery”暗示了这是一个关于JavaScript编程的资源,特别是与AJAX(异步JavaScript和XML)技术相关,而且其设计风格和使用方法受到了jQuery库的启发。在AJAX的帮助下,...
Unix操作系统是计算机科学领域的一个里程碑,它以其简洁、高效和可移植性而著称。Lions源代码,全称为《UNIX Sixth Edition Source Code and Commentary》,是由John Lions编写的,是Unix早期版本——第六版的源代码...
基于YOLOv5+Deepsort实现车辆行人追踪和计数项目源代码,代码封装成一个Detector类,更容易嵌入到自己的项目中 DeepSort追踪器: deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT, max_dist=cfg.DEEPSORT.MAX_DIST, ...
文件"codefans.net"可能是一个代码分享网站的链接,意味着这个Delphi类可能可以从那里获取。在实际应用中,这样的类库可以极大地提高Delphi开发者的生产力,同时增强软件的安全性和稳定性。对于深入学习和理解Delphi...
总结来说,"JS的DLL封装及调用"是一个高级的开发技巧,它结合了JavaScript的灵活性和.NET Framework的强大功能,旨在提高代码的安全性、重用性和性能。在实际应用中,应根据项目需求和团队技术栈来决定是否采用这种...
开发者通常会编写一个`DatabaseHelper`类,封装连接数据库、执行SQL和处理结果集的逻辑,以降低代码的耦合度。 此外,系统可能还涉及到异常处理和日志记录,以确保程序的健壮性。通过`try-catch-finally`语句块捕获...
标题"改U盘图片工具(c++,附源代码,已封装)"指的是一个使用C++编程语言开发的软件工具,它的主要功能是改变U盘的图标。在Windows操作系统中,通常可以通过修改文件的资源来实现这个功能。这个工具不仅提供了功能...
此外,实验还要求添加一个自定义的系统调用,这就涉及到对Linux内核源代码的阅读和修改。首先,需要获取最新的Linux内核源代码,然后在Ubuntu环境中编译内核。添加新系统调用的步骤包括在sys.c文件中添加函数声明,...
源代码可能包含了类的设计,如`Vehicle`(车辆)、`TollBooth`(收费亭)、`Database`(数据库)等,这些类封装了各自的功能,实现了职责分离。 1. **车辆识别**:系统可能通过车牌识别技术来区分不同的车辆。这...
标题中的“用C#自己封装的JPush服务器端调用源代码”指的是使用C#编程语言对极光推送(JPush)服务进行了封装,以便在服务器端方便地调用其API进行消息推送、用户管理等操作。JPush是极光公司提供的一款广泛应用于...
本文将详细讲解如何在一个类中调用另一个类的数据成员,包括两种主要的方法:对象引用和友元函数。这两种方法都有其特定的应用场景和优缺点,开发者应根据实际需求选择合适的方式。 ### 1. 对象引用 对象引用是一...
本项目是一个基于JavaWeb技术的酒店管理系统,适用于本科毕业设计,旨在提供一套完整的酒店业务流程解决方案。该系统利用Eclipse作为开发工具,结合MySQL数据库,实现了一套功能完善的酒店后台管理平台。下面将详细...
实验中,学生被要求实现`time`系统调用的两个不同版本:一个使用C语言库函数,另一个使用汇编代码直接调用。汇编版本可能会遇到错误,如时间转换问题或时钟同步问题。此外,实验还扩展到了实现`rename`系统调用,该...