广州市网站制作服务公司,wordpress添加活动,厦门英文网站建设,做超市促销海报哪个网站好nodejs 不是单线程 在博客项目中关于异步问题#xff1a;
1.当用户添加一条博客时 需要通过post方式向服务器发送数据 后台获取用户以post方式拿到传送过来的数据 然后存入数据库#xff1a; 上面的代码#xff1a;创建一个空字符串 当用户向服务器发送请求时出发data事件将…nodejs 不是单线程 在博客项目中关于异步问题
1.当用户添加一条博客时 需要通过post方式向服务器发送数据 后台获取用户以post方式拿到传送过来的数据 然后存入数据库 上面的代码创建一个空字符串 当用户向服务器发送请求时出发data事件将依次获取来数据进行拼接 当用户请求结束后出发end事件 将拼接后的字符串赋值给req.postData属性 理想中的代码执行顺序如下 但是代码中的data和end事件 都是属于异步 SO 真正执行如下 因为同步代码优先执行 异步代码等同步代码之行结束后再根据规则执行 这就造成后台接收不到传送的数据
使用Promise解决异步问题将异步代码放入Promise中 将要传送的数据放到resolve方法中作为参数 当上面代码执行完成后才执行下面的then里面的代码 同时也回想resolve中的参数传到下面的形参result中 在将其赋值给req.postData 将后续代码放在then中 2.当nodeJS操作数据库时也存在异步
var mysql require(mysql);
var connection mysql.createConnection({host: localhost,user: root,password: root,database: nodeblog
});//开始连接
connection.connect();//查询所有数据
let sql SELECT * FROM student
connection.query(sql, (err, result) {if (err) {console.log(sorry);return;}console.log(result);
});console.log(查询结束)上面代码的执行结果为 说明虽然查询学生表的代码书写在前 但是优先输出“查询结束”可见后续代码不会等到查询学生表代码执行结束后才执行
解决方法也是通过Promise 红色框内为异步代码 黄色框内为后续代码
3.使用Promise实现依次读取文件
/**依次读取文件*///拿到abc三个文件的路径 使用绝对路径
const path require(path)
const fs require(fs)
let a path.join(__dirname, 文件, a.txt)
let b path.join(__dirname, 文件, b.txt)
let c path.join(__dirname, 文件, c.txt)let read path {return new Promise((resolve, reject) {fs.readFile(path, utf8, (err,data) {resolve(data)})})
}read(a).then(data {console.log(data)return read(b)
}).then(data {console.log(data)return read(c)
}).then(data {console.log(data)
})OK