我的回调有什么问题?

时间:2015-07-24 18:38:51

标签: javascript callback

我正在努力学习回调,并想知道我在这里做错了什么,因为我希望在4秒后得到一条消息:

  

我试图开火,但其中一个功能尚未完成

在8秒后发出另一条消息:

  

我等待两个功能完成,现在我已经解雇了

相反,我得到:

  

我等待两个功能完成,现在我已经解雇了

两次,4秒后和8秒后再次。

var cbvarone = false;
var cbvartwo = false;

var whenOthersFinished = function() {
    if (cbvartwo && cbvartwo) {
    console.log("I waited for the two functions to finish and now I've fired");
    }
    else {
    console.log("I've tried to fire but one of the funcs isn't finished yet");
    }
};

var firstFunc = function(cb) {
    setTimeout(function(){cbvarone = true; cb();}, 8000);
};

var secondFunc = function(cb) {
    setTimeout(function(){cbvartwo = true; cb();}, 4000);
};

firstFunc(whenOthersFinished);
secondFunc(whenOthersFinished);

3 个答案:

答案 0 :(得分:2)

你有:

if (cbvartwo && cbvartwo) {

我认为你的意思是:

if (cbvarone && cbvartwo) {

答案 1 :(得分:2)

在你的功能中:

var whenOthersFinished = function() {
    if (cbvartwo && cbvartwo) {
    console.log("I waited for the two functions to finish and now I've fired");
    }
    else {
    console.log("I've tried to fire but one of the funcs isn't finished yet");
    }
};

你的if语句是:

if (cbvartwo && cbvartwo)

将其更改为:

if (cbvarone && cbvartwo)

一切都应该没问题。我验证了您的代码按预期进行了更改

答案 2 :(得分:1)

if (cbvartwo && cbvartwo) {

应该是

if (cbvarone && cbvartwo) {