2015-10-23 294 views
1
function test() { 
    /*some business logic*/ 

    return response; 
} 

function calculate() { 

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

我的测试功能是在不同的js文件,做一些业务的处理(需要一些时间)数据并返回boolean响应。如何使功能响应同步与其他功能的其他语句

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

+0

JavaScript是异步的。不知道'test()'究竟是在做什么,人们无法帮助你弄明白。 'test()'是需要工作的位。如果它发出网络请求等,你真的应该看看承诺或回调,而不是。 JavaScript是单线程的,如果你把它做成同步ajax请求,你会在等待响应时锁定浏览器。 – ste2425

+1

不,javascript是**同步**和单线程。在进行异步请求时,它只是异步的。 –

+0

其真正的丹尼尔.. JavaScript是同步语言..其实问题是用测试方法编写的业务逻辑..它现在已经解决了。谢谢 –

回答

0

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

希望它有帮助。

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

setTimeout函数只是为了让我像普通函数那样花费一些时间来处理操作 – SerMintt