Javascript 如何使函数响应与其他函数中的其他语句同步
我的测试函数位于不同的js文件中,它对数据进行一些业务处理(处理需要一些时间),并返回Javascript 如何使函数响应与其他函数中的其他语句同步,javascript,jquery,function,Javascript,Jquery,Function,我的测试函数位于不同的js文件中,它对数据进行一些业务处理(处理需要一些时间),并返回布尔值响应 我从calculate函数调用test函数(在不同的js文件中)。 我希望控制台输出为“success”(测试函数总是返回true),但它给了我“Fail”。但是,如果我调试这段代码并有时在“(if(test()==true))”上等待,那么我会得到预期的输出。基本上这是一个同步问题。我如何解决这个问题?我认为从上面的代码来看,您在获得“成功”路线运行时不会遇到任何问题。这实际上取决于您的业务逻辑如
布尔值
响应
我从calculate函数调用test函数(在不同的js文件中)。
我希望控制台输出为“
success
”(测试函数总是返回true),但它给了我“Fail
”。但是,如果我调试这段代码并有时在“(if(test()==true))
”上等待,那么我会得到预期的输出。基本上这是一个同步问题。我如何解决这个问题?我认为从上面的代码来看,您在获得“成功”路线运行时不会遇到任何问题。这实际上取决于您的业务逻辑如何运行。若它们以异步方式运行,那个么您可能应该使用事件驱动模型来运行您的计算逻辑。例如,您通过document.addEventListener('testCompleted',caculate())
注册一个事件,然后在test()
中触发此事件
希望对您有所帮助。我尝试稍微修改您的代码,以满足您使用JQuery延迟对象的需要。 如果您注释掉“deferred.reject()”,您应该会看到函数被视为失败的情况 这将使您的函数等待另一个函数给出响应
function test() {
/*some business logic*/
return response;
}
function calculate() {
if (test() == true) {
console.log("Success");
} else {
console.log("Fail");
}
}
JavaScript是异步的。如果不知道
test()<代码>测试()
是需要工作的位。如果是网络请求等,你真的应该看看承诺或回调。JavaScript是单线程的,如果您对其进行黑客攻击以使ajax请求同步,那么您将在浏览器等待响应时锁定浏览器。不,JavaScript是同步的单线程的。只有在进行异步请求时才是异步的。这是真的Daniel。。javascript是同步语言。。实际上,问题在于用测试方法编写的业务逻辑。。它现在已经解决了。感谢setTimeout函数只是为了让该函数像普通函数一样花费一些时间来处理操作
var test = function(){
var deferred = $.Deferred();
setTimeout(function(){
deferred.resolve(); //deferred.reject();
},3000);
return deferred.promise();
};
test().done(function(){
console.log("success");})
.fail(function(){
console.log("fail");})