异步代码执行:
异步的函数读取是无序的,主要看内存大小和网速,所以每次打印出来没有固定的循序
这里准备了三个文件,aaa,bbb,ccc,然后读取,每次打印都是不一样的
为了让异步代码有序执行,就得嵌套起来,这样就形成了回调地狱(虽然成功有序但不利于维护修改)
ES6中,新增了Promise 对象,从此异步编程摆脱了回调函数的束缚。对于现在来说属于中间的解决方法,因为 ES2017 中提出来的,async 和 await 两个关键字的出现,简化的 Promise 的使用。如果想更好的使用async 和 await 还是建议了解Promise
使用语法
let p = new Promise((resolve, reject) => {
// ... some code
if (/* 异步操作成功 */) {
resolve(value);
} else {
reject(error);
}
});
注意点:
new Promise()
必须传入一个函数作为Promise的参数,这个函数在 new Promise的时候就会执行
函数有 resolve 和 reject 两个形参
函数就相当于一个容器,可以将异步任务放到这里
将异步任务成功的结果传给 resolve 函数;将失败的信息传给 reject 函数
.then()
then方法接收以个函数类型的参数,只处理成功
then方法接收两个函数类型的参数,分别用于接收 resolve 的值 和 reject 的值
then方法也可以只接收一个参数,表示只接收 resolve 的值,失败的结果可以通过链式调用catch方法捕获
Promise中的同步异步
new Promise 和 new 其他对象一样,是同步任务。
获取结果时(调用 resolve 触发 then方法时)是异步的。
补充 async,await干了什么(偷懒下)