简体   繁体   English

JavaScript回调似乎无效

[英]JavaScript callback doesn't seem to work

It's probably a simple problem, but I have the following function: 这可能是一个简单的问题,但是我具有以下功能:

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

They are defined as such: 它们的定义如下:

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

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

What I want to do is call 'addObsToMap' before calling 'addMeansToMap', but that's not happening with the current code, as 'addMeansToMap' is currently being returned before 'addObsToMap'. 我想做的是在调用“ addMeansToMap”之前先调用“ addObsToMap”,但是当前代码并没有发生这种情况,因为当前在“ addObsToMap”之前返回“ addMeansToMap”。 What am I missing? 我想念什么?

Are you sure? 你确定吗? In js fiddle addobs is done first 在js中提琴addobs首先完成

https://jsfiddle.net/moym1n8c/ https://jsfiddle.net/moym1n8c/

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

results in : 结果是 :

first
addobjstomap
addmeanstomap

Seems to work perfectly fine.. 似乎工作得很好。

But different browsers and different versions might have different implementations. 但是不同的浏览器和不同的版本可能具有不同的实现。

A change i would make would be to just pass the "addMeansToMap" function as the callback, instead of creating a new function to execute it. 我要进行的更改将只是传递“ addMeansToMap”函数作为回调,而不是创建一个新的函数来执行它。

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

This way, if wanted, we can also more easily pass data from addObsToMap to addMeansToMap without needing a global variable. 这样,如果需要,我们还可以更轻松地将数据从addObsToMap传递到addMeansToMap,而无需全局变量。

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

Hard Coded addMeansToMap(); 硬编码 addMeansToMap(); is called when you call your other function instead of passing it as a callback. 当您调用其他函数而不是将其作为回调传递时被调用。 To fix this just call addMeansToMap(); 要解决这个问题,只需调用addMeansToMap(); from the other function after the other code has executed. 在执行完其他代码之后,从另一个函数返回。

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

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

Using Parametric Callback Note also that you have not actually passed the function in as a callback when you call the function. 使用参数回调还请注意,在调用函数时,实际上并没有将函数作为回调传递。

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

The above way would work keeping the original Obs and Means functions the same. 以上方法可以使原始的Obs和Means函数保持相同。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM