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