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))
”,那么我会得到预期的输出。基本上这是一个同步问题。我该如何解决?
答案 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()
中触发此活动。
希望它有所帮助。