Node js:应该使用alert来调用该函数

node js : should be use alert to invoke the function?

本文关键字:alert 调用 函数 js Node      更新时间:2023-09-26

我不知道我的代码发生了什么…我有一个Node.js查询MySQL数据库内的路由,并显示结果给用户。我的问题是我如何运行查询和阻塞,直到查询完成之前重定向用户到他们所请求的页面?如果我在调用前添加警报,函数会正常运行并快速响应,但如果禁用警报,函数就不能返回任何值,函数就会冻结。

function fred(){ //request function from here to fblue
    alert('fred called'); //if i disable alert,the function not return any value
    get('id', function(datmovMar) {
        var obj = JSON.parse(datmovMar);
        var items = Object.keys(obj);
        var output='';
        items.forEach(function(item) {
            output+=obj[item].something+'<br/>';
          alert(output);
        });         
    });
}
function get(id, callback) {
    $.ajax('http://localhost:8000/' + id + '/', {
        type: 'GET',
        dataType: 'json',
        success: function(data) { if ( callback ) callback(data); },
        error  : function()     { if ( callback ) callback(null); }
    });
}

,这段代码位于节点js

fblue(function(datmovMar){  //call function from here
        res.write(JSON.stringify(datmovMar)); 
        res.end(''n');
});     
function fblue(callback){ 
    var query = connection.query('SELECT something from table'),
        pinMarker = []; 
    query
    .on('error', function(err) {
        console.log( err );
        updateSockets( err );
    })
    .on('result', function( user ) {
        pinMarker.push( user );
    })
    .on('end',function(){
        if(connectionsArray.length) {
            jsonStringx = JSON.stringify( pinMarker );
            callback(jsonStringx);
        }
    }); 
}

我不知道为什么如果警报禁用功能不能正常运行?

请帮…

谢谢

你正在调用jQuery的$.ajax方法,它将创建一个异步的javascript请求到你的服务器。

这意味着控制流将在您启动对服务器的调用之后继续。

所以你不应该期望fred()函数阻塞,直到你的请求已经被服务,相反,你需要以异步方式重写你的浏览器端javascript代码

jQuery的$。Ajax函数默认异步运行。这意味着请求在运行时不会被阻塞,因此后续的代码行将立即执行。对于异步调用,执行顺序不能保证。

你可以在这里"作弊"一下,并指定async选项如下:

$.ajax('http://localhost:8000/' + id + '/', {
    type: 'GET',
    dataType: 'json',
    async: false,
    success: function(data) { if ( callback ) callback(data); },
    error  : function()     { if ( callback ) callback(null); }
});

将强制使用$。ajax调用不返回,直到它完成。然而,这并不是JavaScript真正的做事方式,因为您失去了异步执行所带来的效率。正如另一位KARASZI指出的那样,您应该异步地编写此代码。