节点.js 不等待数据

Node.js does not wait for the data

本文关键字:数据 等待 js 节点      更新时间:2023-09-26
function checkContact(req, res) {
    for (var numb in req.body) {
        console.log(numb + ":" + req.body[numb]);
        checkValue(numb, function(err, result) {
            if (result) {
                console.log(result);
                send[result] = "true";
                console.log(send);
            }
            if (err) {
                console.log(err + "not");
            }
        });
    }
    res.json(send);
}
function checkValue(number, callback) {
    mongo.connect(conn, function() {
        var doc = mongo.collection("user");
        doc.findOne({
            number: number
        }, function(err, res) {
            if (res) {
                //console.log(send+"val");
                //send[number]="true";
                callback(null, number);
            }
        });
        callback(null, 0);
    });
}

在这里,res.json(send)立即执行,而无需等待数据放入发送变量中。我知道node.js是异步的,这就是它的执行方式。有没有办法只有在 for 循环完成执行后才能发送响应?提前感谢任何帮助。

因为 Node.JS 是异步的,所以你需要在回调中嵌入它。

function checkContact(req, res) {
    var reqLength = req.body.length;
    for (var numb in req.body) {
        console.log(numb + ":" + req.body[numb]);
        checkValue(numb, function(err, result) {
            if (result) {
                console.log(result);
                send[result] = "true";
                console.log(send);
            }
            if (err) {
                console.log(err + "not");
            }
            reqLength--;
            if(reqLength === 0) {
                res.json(send);
            }
        });
    }
}

Nodejs 使用异步调用,您应该尝试Promises等待和发送响应阅读这篇文章,它会帮助你

[http://12devs.co.uk/articles/promises-an-alternative-way-to-approach-async-javascript/][1]