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

时间:2015-10-23 07:32:55

标签: javascript jquery function

function test() {
  /*some business logic*/

  return response;
}

function calculate() {

  if (test() == true) {
    console.log("Success");
  } else {
    console.log("Fail");
  }
}

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

我从compute函数调用test函数(在不同的js文件中)。 我期待控制台输出为“success”(测试函数总是返回true),但是它给了我“Fail”。但是,如果我调试此代码并等待“(if(test()==true))”,那么我会得到预期的输出。基本上这是一个同步问题。我该如何解决?

2 个答案:

答案 0 :(得分:1)

我尝试稍微修改您的代码以满足您使用JQuery Deferred对象的需求。 如果你注释掉“deferred.reject()”,你应该得到你的函数被认为是失败的情况。

它会让你的函数等待另一个函数给出响应。

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

答案 1 :(得分:0)

我认为根据上面的代码,你不会有任何问题需要获得成功"路线跑。这实际上取决于您的业务逻辑如何运行。如果它们以异步方式运行,那么您应该使用事件驱动模型来运行计算逻辑。例如,您通过document.addEventListener('testCompleted', caculate())注册一个活动,然后在test()中触发此活动。

希望它有所帮助。