假设我有一个像这样的脚本
var a = getData();
function getData() {
if (some_condition) { // Do this }
else {// Do this }
return fetchFromDB(param);
}
function fetchFromDB(param) {
db.transaction(function (tx) {
tx.executeSQL("SELECT foo FROM bar WHERE column = ? ", [param], function (tx, res) {
return res.rows.item(0).foo
});
});
}
问题是tx.executeSQL是异步的,因此fetchFromDB()方法将undefined返回给调用者,即getData(),同样的undefined被传递回main函数。 为了避免这种情况,我需要在fetchFromDB()中有一个回调,比如
tx.executeSQL("SELECT foo FROM bar WHERE column = ? ", [param], function (tx, res) {
callBack1(res.rows.item(0).foo);
});
所以现在将值返回给getData()但是我需要在这里有一个callback2来返回main函数,它也从callback1返回数据。通过这种方式,似乎我需要回调我所在的地方。当然,我在这里遗漏了一些东西!如何限制一个回调?
答案 0 :(得分:0)
您可以使用嵌套函数
来实现此目的function f1() {
function f1callback(param) {
console.log(" callback 1 " + param);
}
f2(f1callback);
}
function f2(callback) {
function f2callback(param) {
console.log(" callback 2 " + param);
callback(param);
}
f3(f2callback);
}
function f3(callback) {
function f3callback(param) {
console.log(" callback 3 " + param);
callback(param);
}
f4(f3callback);
}
function f4(callback) {
setTimeout(function () {
callback("data");
}, 1000);
}
f1();