ES6---async, await, promise 综合例子
ES6---async, await, promise 综合例子
- new Promise(主线程代码).then(成功微任务, 失败微任务);
- sync---替代promise
- await---替代then
1.
<div id="aa"></div>
<script type="text/javascript">
// new Promise(主线程代码).then(成功微任务, 失败微任务);
// async---替代promise
// await---替代then
var kk = [{ age: 18 }, { age: 19 }, { age: 20 }];
console.log(kk);
for (var i = 0; i < kk.length; i++) {
document.getElementById("aa").innerHTML += '<div>' + kk[i].age + '</div>';
console.log(kk[i]);
}
</script>
console:

2.
var kk = [{ age: 18 }, { age: 19 }, { age: 20 }];
console.log(kk);
//遍历循环
for (const k_item of kk) {
document.getElementById("aa").innerHTML += '<div>' + k_item.age + '</div>';
console.log(k_item.age);
console:

3. 延迟效果
//延迟效果 setTimeout可以实现定时效果,但是,怎么知道它结束呢?
//resolve, reject发通知,用then捕获
var kk = [{ age: 18 }, { age: 19 }, { age: 20 }, { age: 22 }, { age: 40 }, { age: 25 }, { age: 23 }];
console.log(kk);
async function sleep(sec = 1000) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, sec);
});
}
async function show() {
for (const k_item of kk) {
//类似于Thread.sleep(500);
await sleep(500); //卡住,卡到sleep()里面的promise发出了resolve()
document.getElementById("aa").innerHTML += '<div>' + k_item.age + '</div>';
};
};
show();
console:

页面间隔500ms显示

4.
//class 写死的写法
class MyTask {
then(resolve, reject) {
console.log('123');
};
}
console:

5.
class MyTask {
then(resolve, reject) {
console.log('123');
resolve('来自class的promise发出通知的值');
};
}
var p = new MyTask();
console.log(p);
new Promise((resolve, reject) => {
resolve('a123');
}).then(result => {
console.log(result);
//不继续执行就不用return,否则需要return, 7种类型都可以
return p;
}, error => { }).then(
result => {
console.log(result);
});
console:

6. 上面的代码用async await实现
class MyTask {
then(resolve, reject) {
console.log('123');
resolve('来自class的promise发出通知的值');
};
}
var p = new MyTask();
async function ttt() {
let result = await 'a123';
console.log(result);
let result2 = await p;
console.log(result2);
}
ttt();
console:

赞 (0)
