之前在dojo/aaspect中捕获异步调用响应



在将异步请求传递给原始方法之前,尝试在dojo/aaspect before((事件中捕获异步请求的响应,如下所示:

aspect.before(ecm.model.SearchTemplate.prototype, "_searchCompleted", function(response, callback, teamspace){
var args = [];
if(response.num_results==0 && isValidQuery){
var args = [];
var requestParams = {};
requestParams.repositoryId = this.repository.id;
requestParams.query = query;

Request.invokePluginService("samplePlugin", "sampleService",
{
requestParams: requestParams,
requestCompleteCallback: lang.hitch(this, function(resp) {  // success
//call stack doesnt enter this code block before returning params to the original 
//function
resp.repository = this.repository;
args.push(resp);
args.push(callback);
args.push(teamspace);
})
}
);
return args; //args is empty as the response is not captured here yet.
}
});

aspect.around就是您想要的。它将为您提供一个可以随意调用的原始函数的句柄(因此,在您准备好的任何时候异步,或者根本不异步(。

aspect.around(ecm.model.SearchTemplate.prototype, "_searchCompleted", function advisingFunction(original_searchCompleted){
return function(response, callback, teamspace){
var args = [];
if(response.num_results==0 && isValidQuery){
var args = [];
var requestParams = {};
requestParams.repositoryId = this.repository.id;
requestParams.query = query;

Request.invokePluginService("samplePlugin", "sampleService",
{
requestParams: requestParams,
requestCompleteCallback: lang.hitch(this, function(resp) {  // success
//call stack doesnt enter this code block before returning params to the original 
//function
resp.repository = this.repository;
args.push(resp);
args.push(callback);
args.push(teamspace);
original_searchCompleted.apply(this,args);
})
}
); 
}
}
});

相关内容

  • 没有找到相关文章

最新更新