需要多次回调

时间:2013-06-03 04:38:07

标签: javascript jquery callback

假设我有一个像这样的脚本

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返回数据。通过这种方式,似乎我需要回调我所在的地方。当然,我在这里遗漏了一些东西!如何限制一个回调?

1 个答案:

答案 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();