gpt4 book ai didi

javascript - 不确定 Node.js 代码是否异步

转载 作者:行者123 更新时间:2023-11-30 10:22:07 24 4
gpt4 key购买 nike

我正在运行一个简单的 node.js 应用程序,它在 http post 上发送一个 JSON 对象。该应用程序正在使用 node-mysql 和 express 模块。

这是代码。

HTML:

$(document).ready(function () {
setInterval(function() {
var path = window.location.pathname;
$.ajax({
url: path,
type: "POST",
contentType: "application/json",
processData: false,
complete: function (data) {
var a = JSON.parse(data.responseText);
var display = "<ul style='list-style-type:none'>";
var count = 1;
for (var key in a) {
if (a.hasOwnProperty(key)) {
var str = a[key].split('|');
display += "<li style='background: #333; margin: 10px 0;'>" + str[0] + " <span style='color:#ddd;'>to " + str[1] + "</span></li>";
count++;
}
}
display += "</ul>"
$('#output').html(display);
}
});
}, 3000);
});

页面配置:

app.get('/', function(req,res) {
res.sendfile(__dirname + '/index.html');
});

app.get('/docs', function(req,res) {
res.sendfile(__dirname + '/display.html');
});

app.get('/bio', function(req,res) {
res.sendfile(__dirname + '/display.html');
});

app.get('/int', function(req,res) {
res.sendfile(__dirname + '/display.html');
});

以及用于根据页面请求发送 JSON 对象的 app.post 方法之一。有四个,根,它只是指向/docs、/bio 和/int 的链接列表。

app.post('/docs', function(req, res){
var query = "/* query */";
connection.query(query, req.body, function(err, rows, fields) {
if (err) throw err;
var obj = {};
var id = "";
for (var i = 0; i < rows.length; i++) {
id = "id" + i;
obj[prop] = rows[i].name + '|' + rows[i].counter_name;
}
res.send(JSON.stringify(obj));
});
});

应用程序运行并似乎更新正常,但我不确定它是否是异步的。基本上,只需要知道它是否是,如果不是,则需要一些指示才能做到这一点。

最佳答案

Node 中的经验法则:除非方法名称中出现“sync”一词,否则所有 IO 都是异步的。这本质上就是 Node 的意义。

IO 包括必须打开文件的任何时间,其中包括所有连接,包括 HTTP 连接、SQL 连接、RabbitMQ 连接等,以及磁盘上的所有文件,包括日志文件等。

通常要了解异步代码,您应该查找回调的位置。在 Javascript 中,回调通常作为匿名函数提供。例如

connection.query(query, req.body, function(err, rows, fields) {
// ^ anonymous function definition

最后一个参数是回调。通常,我会将回调定义为作为参数传递给另一个函数的函数(通常但不总是作为匿名函数。)当执行整行代码时,回调当然不会被调用。当 query 的定义说要调用它时调用它,在这种情况下这意味着在收到对查询的响应之后,这可能是几秒钟之后,特别是在执行以下代码之后很长时间,并且在远处的调用堆栈中。

需要回调来实现异步,因为在 connection.query 被调用之后,响应还没有进来。所以不可能对响应做任何事情,无论是错误还是行。这需要稍后发生,即异步发生。因此,您传递回调以在稍后的某个时间点执行该处理。

关于javascript - 不确定 Node.js 代码是否异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com