1.promise对象
// promise对象
const promise=new Promise((resolve,reject)=>{
console.log(1);
resolve();
console.log(2);
})
promise.then(()=>{
console.log(3);
})
console.log(4);//打印的结果:1,2,4,3
const promise=Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log);
// 链式调用,then的参数是非函数,跳过。所以最终返回1。
// promise的应用
// 3秒之后亮一次红灯,再过两秒亮一次绿灯,再过1秒亮一次黄灯,用promise实现多次交替亮灯的效果
// 拆解:(1)多少秒后亮某个颜色的灯,(2)顺序亮一批灯,循环顺序亮一批灯
function light(color, second) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(color);
resolve();
}, second * 1000);
})
}
function orderLights(list) {
let promise = Promise.resolve();
list.forEach(item => {
promise = promise.then(function () {
return light(item.color, item.second);
})
});
promise.then(function () {
return orderLights(list);
})
}
orderLights([{
color: 'red',
second: 3,
}, {
color: 'green',
second: 2,
}, {
color: 'yellow',
second: 1,
}]);
2.generator函数
// generator函数 一个进程多个协程;
function* createIterator() {
let first = yield 1;
let second = yield first + 2;
yield second + 3;
}
let iterator = createIterator();
console.log(iterator.next());//返回yield 后面表达式的值
console.log(iterator.next(4));// 参数改变上一个yield后面表达式的值
console.log(iterator.next(5));
console.log(iterator.next());
3.async函数
// async函数
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
return Promise.resolve().then(() => {
console.log("async2 promise");
})
}
async1();
async function f() {
await Promise.reject('error');//await 后是reject,后序代码不会执行
console.log(1);
await 100;
}
// 后序代码执行,加try...catch
async function f() {
await Promise.reject('error').catch(() => { });
console.log(1);
await 100;
}
async function f() {
try {
await Promise.reject('error');
} catch (e) {
} finally {
}
console.log(1);
await 100;
}
f();