Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node js:是否应该使用警报来调用函数?_Javascript_Node.js - Fatal编程技术网

Javascript node js:是否应该使用警报来调用函数?

Javascript node js:是否应该使用警报来调用函数?,javascript,node.js,Javascript,Node.js,我不知道我的代码会发生什么。我有一个Node.js,它在路由中查询MySQL数据库,并将结果显示给用户。我的问题是,在将用户重定向到他们请求的页面之前,如何运行查询并阻止直到查询完成? 如果我在调用前添加警报,函数将正常运行并快速响应。但是如果警报禁用,函数将无法返回任何值,函数将类似于冻结 此用户代码用于向nodejs请求值 function fred(){ //request function from here to fblue alert('fred called'); //if

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

此用户代码用于向nodejs请求值

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); }
    });
}
我不知道为什么如果警报禁用功能不能正常运行

请帮忙


感谢您调用jQuery的
$.ajax
方法,该方法将创建对服务器的异步javascript请求

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


因此,在您的请求得到满足之前,您不应该期望
fred()
函数阻塞,相反,您需要以异步方式重写浏览器端javascript代码。

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

您可以在此处“欺骗”一点,并指定异步选项,如下所示:

$.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所指出的,您应该异步编写此文件。

谢谢。

这是工作,但有时我会再次遇到相同的问题……可能还有其他解决方案吗?
var obj=JSON.parse(datmovMar)
您不需要解析结果,因为您已经指定了
数据类型:“json”
。在听从KARASZI的建议后,到目前为止你有什么收获?
$.ajax('http://localhost:8000/' + id + '/', {
    type: 'GET',
    dataType: 'json',
    async: false,
    success: function(data) { if ( callback ) callback(data); },
    error  : function()     { if ( callback ) callback(null); }
});