Javascript PageMethods会降低进程和工作速度
我的页面上有很多页面方法。每个方法都用于从数据库获取数据。我已按以下方式订购。但我的问题是,成功方法之外的行,但在pagemethods完成过程之前,主函数内部的行都在工作Javascript PageMethods会降低进程和工作速度,javascript,pagemethods,Javascript,Pagemethods,我的页面上有很多页面方法。每个方法都用于从数据库获取数据。我已按以下方式订购。但我的问题是,成功方法之外的行,但在pagemethods完成过程之前,主函数内部的行都在工作 function check_valid() { // some code Pagemethod1 function suc1() { //some code PageMethod2 function suc2() {
function check_valid()
{
// some code
Pagemethod1
function suc1()
{
//some code
PageMethod2
function suc2()
{
//some code
Page Method3
function suc3()
{
//some code
}
function err3(){}
}
function err2(){}
}
function err1(){}
return true; //this line is working before the pagemethods complete the process
}
我不熟悉“PageMethods”,但听起来这些函数中的每一个都是异步的,因为它从远程数据库接收数据。因为JavaScript在一个线程内运行,所以异步进程通常有一个附加回调函数的选项,该函数在进程完成后启动。这允许javascript在等待缓慢的数据库调用时执行其他操作,例如返回true
,解释您的观察结果
相反,在数据库API中使用回调模式:
editDatabase(args*, function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能会使用事件模式:
var myDb = new DB();
myDb.edit(args*)
myDb.bind('complete', function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能使用承诺,您可以阅读这些承诺
如果您正在从同步语言迁移,这些模式可能需要一些时间才能习惯,但它们对于JavaScript来说是必不可少的。您还可以找到有关JavaScript异步方面的良好指南。我不熟悉“PageMethods”,但听上去这些函数都是异步的,因为它们从远程数据库接收数据。因为JavaScript在一个线程内运行,所以异步进程通常有一个附加回调函数的选项,该函数在进程完成后启动。这允许javascript在等待缓慢的数据库调用时执行其他操作,例如返回true
,解释您的观察结果
相反,在数据库API中使用回调模式:
editDatabase(args*, function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能会使用事件模式:
var myDb = new DB();
myDb.edit(args*)
myDb.bind('complete', function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能使用承诺,您可以阅读这些承诺
如果您正在从同步语言迁移,这些模式可能需要一些时间才能习惯,但它们对于JavaScript来说是必不可少的。您还可以找到有关JavaScript异步方面的良好指南。我不熟悉“PageMethods”,但听上去这些函数都是异步的,因为它们从远程数据库接收数据。因为JavaScript在一个线程内运行,所以异步进程通常有一个附加回调函数的选项,该函数在进程完成后启动。这允许javascript在等待缓慢的数据库调用时执行其他操作,例如返回true
,解释您的观察结果
相反,在数据库API中使用回调模式:
editDatabase(args*, function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能会使用事件模式:
var myDb = new DB();
myDb.edit(args*)
myDb.bind('complete', function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能使用承诺,您可以阅读这些承诺
如果您正在从同步语言迁移,这些模式可能需要一些时间才能习惯,但它们对于JavaScript来说是必不可少的。您还可以找到有关JavaScript异步方面的良好指南。我不熟悉“PageMethods”,但听上去这些函数都是异步的,因为它们从远程数据库接收数据。因为JavaScript在一个线程内运行,所以异步进程通常有一个附加回调函数的选项,该函数在进程完成后启动。这允许javascript在等待缓慢的数据库调用时执行其他操作,例如返回true
,解释您的观察结果
相反,在数据库API中使用回调模式:
editDatabase(args*, function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能会使用事件模式:
var myDb = new DB();
myDb.edit(args*)
myDb.bind('complete', function() {
//Stuff to do database call is complete
});
或者,您的数据库API可能使用承诺,您可以阅读这些承诺
如果您正在从同步语言迁移,这些模式可能需要一些时间才能习惯,但它们对于JavaScript来说是必不可少的。您还可以找到有关JavaScript异步方面的良好指南。使用JavaScript类可能会有所帮助。回调也是ajax的关键
function check_valid(){
var fn = this; //assign this to a variable for ease of use
var callbacks = []; //array to store all results
var calls = []; //all ajax calls
this.complete = function(callback){
function check(){
if(callbacks.length==calls.length){
callback(callbacks);
}else{
setTimeout(function(){
fn.check()
},50);
}
}
return fn;
}
this.callServ(params){
calls.push(params);
params.success = function(ret){
callbacks.push({data:ret,status:'success'});
}
params.error = function(ret){
callbacks.push({data:ret,status:'success'});
}
$.ajax(params);
return fn;
}
return this;
}
这应该允许您系统地执行多个调用,然后使用单个回调来处理所有调用。我使用jQueryAjax使ajax调用更容易,并传递相同的参数
因此,使用如下方式:
var checkValid = new check_valid();
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.complete(function(data){
//data is an array of all call serv returns.
});
这可能与你目前掌握的情况相去甚远,大量的信息并不能告诉我到底在做什么。这个例子可能有点高级,但它会给人一种同步的假象,至少与javascript一样接近。使用javascript类可能会有所帮助。回调也是ajax的关键
function check_valid(){
var fn = this; //assign this to a variable for ease of use
var callbacks = []; //array to store all results
var calls = []; //all ajax calls
this.complete = function(callback){
function check(){
if(callbacks.length==calls.length){
callback(callbacks);
}else{
setTimeout(function(){
fn.check()
},50);
}
}
return fn;
}
this.callServ(params){
calls.push(params);
params.success = function(ret){
callbacks.push({data:ret,status:'success'});
}
params.error = function(ret){
callbacks.push({data:ret,status:'success'});
}
$.ajax(params);
return fn;
}
return this;
}
这应该允许您系统地执行多个调用,然后使用单个回调来处理所有调用。我使用jQueryAjax使ajax调用更容易,并传递相同的参数
因此,使用如下方式:
var checkValid = new check_valid();
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.complete(function(data){
//data is an array of all call serv returns.
});
这可能与你目前掌握的情况相去甚远,大量的信息并不能告诉我到底在做什么。这个例子可能有点高级,但它会给人一种同步的假象,至少与javascript一样接近。使用javascript类可能会有所帮助。回调也是ajax的关键
function check_valid(){
var fn = this; //assign this to a variable for ease of use
var callbacks = []; //array to store all results
var calls = []; //all ajax calls
this.complete = function(callback){
function check(){
if(callbacks.length==calls.length){
callback(callbacks);
}else{
setTimeout(function(){
fn.check()
},50);
}
}
return fn;
}
this.callServ(params){
calls.push(params);
params.success = function(ret){
callbacks.push({data:ret,status:'success'});
}
params.error = function(ret){
callbacks.push({data:ret,status:'success'});
}
$.ajax(params);
return fn;
}
return this;
}
这应该允许您系统地执行多个调用,然后使用单个回调来处理所有调用。我使用jQueryAjax使ajax调用更容易,并传递相同的参数
因此,使用如下方式:
var checkValid = new check_valid();
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.complete(function(data){
//data is an array of all call serv returns.
});
这可能与你目前掌握的情况相去甚远,大量的信息并不能告诉我到底在做什么。这个例子可能有点高级,但它会给人一种同步的假象,至少与javascript一样接近。使用javascript类可能会有所帮助。回调也是ajax的关键
function check_valid(){
var fn = this; //assign this to a variable for ease of use
var callbacks = []; //array to store all results
var calls = []; //all ajax calls
this.complete = function(callback){
function check(){
if(callbacks.length==calls.length){
callback(callbacks);
}else{
setTimeout(function(){
fn.check()
},50);
}
}
return fn;
}
this.callServ(params){
calls.push(params);
params.success = function(ret){
callbacks.push({data:ret,status:'success'});
}
params.error = function(ret){
callbacks.push({data:ret,status:'success'});
}
$.ajax(params);
return fn;
}
return this;
}
这应该允许您系统地执行多个调用,然后使用单个回调来处理所有调用。我使用jQueryAjax使ajax调用更容易,并传递相同的参数
因此,使用如下方式:
var checkValid = new check_valid();
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.callServ({url:url,data:data});
checkValid.complete(function(data){
//data is an array of all call serv returns.
});
这可能与你目前的情况相去甚远,t