这可能是一个简单的问题,但我有以下功能:
addValues();
function addValues() {
addObsToMap(function() {
addMeansToMap();
});
}
它们的定义如下:
function addObsToMap(callback) {
console.log("addObsToMap");
callback();
}
function addMeansToMap() {
console.log("addMeansToMap");
}
我想要做的是在调用'addMeansToMap'之前调用'addObsToMap',但是当前的代码没有发生这种情况,因为'addMeansToMap'当前正在'addObsToMap'之前返回。我错过了什么?
答案 0 :(得分:1)
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函数不变。