JavaScript回调似乎不起作用

时间:2017-03-25 14:38:17

标签: javascript

这可能是一个简单的问题,但我有以下功能:

addValues();
function addValues() {
    addObsToMap(function() {
        addMeansToMap();
    });                 
}

它们的定义如下:

function addObsToMap(callback) {
    console.log("addObsToMap");
    callback();
}                                                               

function addMeansToMap() {
    console.log("addMeansToMap");   
}   

我想要做的是在调用'addMeansToMap'之前调用'addObsToMap',但是当前的代码没有发生这种情况,因为'addMeansToMap'当前正在'addObsToMap'之前返回。我错过了什么?

3 个答案:

答案 0 :(得分:1)

你确定吗?在js小提琴中首先完成addobs

https://jsfiddle.net/moym1n8c/

console.log('first');
addValues();   

结果:

first
addobjstomap
addmeanstomap

答案 1 :(得分:1)

似乎工作得很好..

但是不同的浏览器和不同的版本可能有不同的实现。

我要做的改变就是将“addMeansToMap”函数作为回调传递,而不是创建一个新函数来执行它。

addValues();
function addValues() {
    addObsToMap(addMeansToMap);                 
}

function addObsToMap(callback) {
    console.log("addObsToMap");
    callback();
}                                                               

function addMeansToMap() {
    console.log("addMeansToMap");   
}  

这样,如果需要,我们也可以更轻松地将数据从addObsToMap传递到addMeansToMap,而无需全局变量。

    addValues();
    function addValues() {
        addObsToMap(addMeansToMap);                 
    }

    function addObsToMap(callback) {
        console.log("addObsToMap");
        callback("addMeansToMap");
    }                                                               

    function addMeansToMap(arg) {
        console.log(arg); 
    }  

答案 2 :(得分:0)

硬编码 当您调用其他函数而不是将其作为回调传递时,将调用addMeansToMap();。要解决此问题,只需在执行其他代码后从其他函数调用addMeansToMap();

function addObsToMap() {
     console.log("addObsToMap");   
     addMeansToMap();
} 

function addMeansToMap(){ 
     console.log("addMeansToMap");
} 

使用参数回调 另请注意,在调用函数时,您实际上没有将函数作为回调函数传递。

addValues(); 
function addValues(){ 
    addObsToMap(addMeansToMap);
}

上述方法可以保持原始的Obs和Means函数不变。