异步
JS 异步编程的方法
- 回调函数
- 事件监听
- 发布/订阅
- Promise
- Generator
-
async/await
1.什么是异步
一个任务分成两段,先执行一段,然后转而执行其他任务,等做好准备,再回过头执行第二段
这种不连续的执行,叫做异步。
相应地,连续执行的叫做同步
回调函数
回调函数把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,直接调用这个函数
fs.readFile("/etc/passwd", function (err, data) {
if (err) throw err;
console.log(data);
});
分离回调
jquery 的 ajax 是典型的分离回调
$.ajax({}, success, error);
function success(data) {
console.log(data);
}
function error(err) {
console.error(err);
}
first error
NodeJS 采用的是 first error,所有系统异步接口第一个参数都是 error 对象
function callback(err, data) {
if (err) {
// 出错
return;
}
// 成功
console.log(data);
}
async("url", callback);
- 问:为什么 NodeJS 约定,回调函数的第一个参数必须是错误对象 err(如果没有错误,返回该参数 null)
- 答:执行时分成两段,在两段之间抛出错误,程序无法捕获,只能当作参数,传入第二段
回调函数的罪状
- 回调地狱
- 并发执行
- 信任问题
参见