Javascript 如何使函数响应与其他函数中的其他语句同步

Javascript 如何使函数响应与其他函数中的其他语句同步,javascript,jquery,function,Javascript,Jquery,Function,我的测试函数位于不同的js文件中,它对数据进行一些业务处理(处理需要一些时间),并返回布尔值响应 我从calculate函数调用test函数(在不同的js文件中)。 我希望控制台输出为“success”(测试函数总是返回true),但它给了我“Fail”。但是,如果我调试这段代码并有时在“(if(test()==true))”上等待,那么我会得到预期的输出。基本上这是一个同步问题。我如何解决这个问题?我认为从上面的代码来看,您在获得“成功”路线运行时不会遇到任何问题。这实际上取决于您的业务逻辑如

我的测试函数位于不同的js文件中,它对数据进行一些业务处理(处理需要一些时间),并返回
布尔值
响应

我从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");})