如何将asynchronous调用转换为JavaScript中的同步?

我在客户端使用JavaScript和服务器端的node.js,实际上我试图做一个远程validationinput字段,结果必须是布尔值,它应该基于服务器调用,我的代码如下,

jQuery.validator.addMethod("remoteValidation", function(value, element) { var accountName = $("#accountName").val(); var accountType = $("#accountType").val(); var valid = this.Validation(accountType,accountName); //returning undefined becoz return statement executing before server side execution return valid; }, "Entered email or username already exists"); this.validation = function(accountType,accountName,cb){ var valid =null; ss.rpc('AccountsManagement.userNameChecker',accountType,accountName,function(res) { // res will return boolean valid = res; }); //valid is null becoz this line is executing before valid = res line. return valid; }; 

我的服务器端代码:

  services.imAccountsService.getAllImAccounts(accountType,accountName, function(err,result){ if(err){ return; } if(result == null){ res(true); } else{ res(false); } }); 

我的问题是asynchronous执行,如何在这种情况下使代码同步

增加了jqueryvalidation方法中的函数。

  if(param.type === "rpc"){ var args = param.data.remoteArgs(); ss.rpc(param.url, args, function(response) { validator.settings.messages[element.name].remote = previous.originalMessage; var valid = response === true; if ( valid ) { var submitted = validator.formSubmitted; validator.prepareElement(element); validator.formSubmitted = submitted; validator.successList.push(element); validator.showErrors(); } else { var errors = {}; var message = response || validator.defaultMessage( element, "remote" ); errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; validator.showErrors(errors); } previous.valid = valid; validator.stopRequest(element, valid); }); } 

它工作正常….感谢所有…

您将不得不等待res的值可用。 看下面的代码是否工作。

  jQuery.validator.addMethod("remoteValidation", function(value, element) { var accountName = $("#accountName").val(); var accountType = $("#accountType").val(); var valid = this.Validation(accountType,accountName); //returning undefined becoz return statement executing before server side execution return valid; }, "Entered email or username already exists"); this.validation = function(accountType,accountName,cb){ var valid =null; ss.rpc('AccountsManagement.userNameChecker',accountType,accountName,function(res) { // res will return boolean while(res <> null) { window.setInterval(function(){waitFunc()}, 1000); } valid = res; }); //valid is null becoz this line is executing before valid = res line. return valid; }; function waitFunc() { //do nothing }