0

假设我有这样的脚本

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 被传递回主函数。为避免这种情况,我需要在 fetchFromDB() 中有一个回调,例如

tx.executeSQL("SELECT foo FROM bar WHERE column = ? ", [param], function (tx, res) {
   callBack1(res.rows.item(0).foo);
  });

所以现在值返回给 getData() 但我需要在这里有一个回调 2 来返回主函数,它也从回调 1 返回数据。通过这种方式,我似乎需要在我打电话的地方进行回调。当然,我在这里遗漏了一些东西!如何限制一个回调?

4

1 回答 1

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();
于 2013-06-03T05:10:11.563 回答