setTimeout(function() { console.log('第一个计时器回调执行,开启第二个');
setTimeout(function() {
console.log('第二个计时器回调执行,开启第三个');
setTimeout(function() {
console.log('第三个计时器回调执行');
}, 2000);
}, 2000);
}, 2000);
// 创建一个promise实例
function timeout(time, data) { return new Promise(function(yes, no) {
setTimeout(function() {
yes(data);
}, time);
});
}
timeout(2000)
.then(function() {
console.log('第一个计时器回调执行,开启第二个');
return timeout(4000);
});
.then(function() {
console.log('第二个计时器回调执行,开启第三个');
return timeout(4000);
})
.then(function() {
console.log('第三个计时器回调执行');
});
function pmsTimeout(time) { return new Promise(function(yes, no) {
setTimeout(function() {
yes('嘿!别睡了,起来嗨!');
}, time);
});
}
pmsTimeout(2000)
.then(function(data) {
console.log(data); // '嘿!别睡了,起来嗨!'
});
function ajax(config) { return new Promise(function(yes, no) {
Object.assign(config, {
success: data => yes(data),
error: () => no()
});
$.ajax(config);
});
}
let ajaxP = ajax({ url: 'xxx' });
ajaxP.then(function(data) {
console.log('请求成功');
console.log(data);
})
.cache(function() {
console.log('请求失败');
});
// 即便请求结束了,后续也可以通过then拿到数据
ajaxP.then(function(data) {
console.log('仍然可以得到前面请求回来的数据');
console.log(data);
})
function timeout(time) { return new Promise(function(yes, no) {
setTimeout(function() {
yes();
}, time);
});
}
// await关键字会等待后面的语句执行完毕后继续向下执行,直到遇到下一个await关键字
async function test() {
await timeout(1000);
console.log('1秒后我才会执行');
await timeout(2000);
console.log('我要等待上面的代码执行成功后我才执行');
await timeout(3000);
console.log('以同步方式编写异步代码真是太爽了');
}
// 调用test异步函数, 体验异步编程幸福生活
test();
async function ajax(url) { // await关键字还有一个特点, 它可以返回原本需要then才能拿到的数据
let response = await fetch(url);
let data = response.ok && await response.json();
console.log('可以在这里使用data数据了');
}
// 开启幸福生活
ajax('xxx.json');
function timeout(time) { return new Promise(function(yes, no) {
setTimeout(function() {
no();
}, time);
});
}
async function test(time) {
async function test(time) {
async function test(time) {
async function test(time) {
await new Promise((yes, no) => yes());
return 123;
}
test()
.then(data => console.log(data)); // then成功回调可接收async函数的返回值
function animate(selector, style, time) { return new Promise(function(yes, no) {
$(selector).animate(style, time, () => { yes() });
});
}
animate('div', { width: 300 }, 2000)
.then(() => { animate('div', { height: 300 }, 1000) })
.then(() => { animate('div', { marginLeft: 500 }, 2000) })
.then(() => { animate('div', { marginTop: 300 }, 1000) })
.catch(() => console.log('发生了未知错误, 动画执行失败了'));
function animate(selector, style, time) { return new Promise(function(yes, no) {
$(selector).animate(style, time, () => { yes() });
});
}
async function divRun() {
await animate('div', { width: 300 }, 2000);
await animate('div', { height: 300 }, 1000);
await animate('div', { marginLeft: 500 }, 2000);
await animate('div', { marginTop: 300 }, 1000);
}
divRun()
.catch(() => console.log('发生了未知错误, 动画执行失败了'));
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |