Node.js回调地狱

时间:2015-07-22 16:28:47

标签: javascript node.js

我现在正在学习node.js而且我遇到了麻烦。

我查看了事件发射器,但它似乎与我无关。

这就是我所说的:

exports.search = function(lat, lng, Arr, callback) {

    //something

    geocoder.reverse({
        lat: lat,
        lon: lng
    }, function(err, res, callback) {

        //finding the area
        if (area !== "null") {
            pool.getConnection(function(err, connection, callback) {
                if (err) {

                } else {
                    connection.query("SOME SQL CODE", function(err, rows, fields, callback) {
                        if (found what Im looking
                            for) {
                            connection.query("SOME SQL CODE", function(err, rows, fields, callback) { //looking for something else
                                if (err) {
                                    callback(true);
                                } else {
                                    if (rows[0] === undefined) {
                                        callback(true);
                                    } else {
                                        console.log("found!");
                                        callback(null, rows[0]);
                                    }
                                }
                            });

                        } else if (err) {

                        }
                    });
                }
            });
        } else {

        }
    });
};

我找到了我的#34;发现了!"在控制台日志中,但回调由于某种原因不起作用。

如果我在函数结尾处放回一个回调"搜索"它确实回电,我知道我对获得回调的功能没有问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为回调(null,rows [0])是函数geocoder.reverse的回调。您可以更改搜索功能的名称回调是callback1,然后调用如下。

 protected void Button2_Click(object sender, EventArgs e)
{
    int no1;
    int no2;
    int no3;
    int no4;
    int no5;
    int no6;
    int no7;
    int no8;
    int no9;

    no1 = int.Parse(txt1.Text);
    no2 = int.Parse(txt2.Text);
    no3 = int.Parse(txt3.Text);
    no4 = int.Parse(txt4.Text);
    no5 = int.Parse(txt5.Text);
    no6 = int.Parse(txt6.Text);
    no7 = int.Parse(txt7.Text);
    no8 = int.Parse(txt8.Text);
    no9 = int.Parse(txt9.Text);


    int[] a = new int[] {no1,no2,no3,no4,no5,no6,no7,no8,no9 };

    Array.Sort(a);

    foreach (var str in a)
    {
          MessageBox.Show(str.ToString()); //display in MessageBox, but i want to display back to 9 different textbox.
    }

};

您可以将async lib应用于您的代码,以便您的代码也清晰。

答案 1 :(得分:0)

最好使用可以帮助您的图书馆:例如asyncq