回调函数
function f1(callback) {
setTimeout(function () {
// f1的任务代码
callback();
}, 1000);
}
f1(f2)
高度耦合
事件监听
f1.on('done', f2);
function f1() {
setTimeout(function () {
// f1的任务代码
f1.trigger("done");
}, 1000);
}
发布/订阅
- 我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做"发布/订阅模式"(publish-subscribe pattern),又称"观察者模式"(observer pattern)。
jQuery.subscribe("done", f2);
function f1() {
setTimeout(function () {
// f1的任务代码
jQuery.publish("done");
}, 1000);
}
- 这种方法的性质与"事件监听"类似,但是明显优于后者。因为我们可以通过查看"消息中心",了解存在多少信号、每个信号有多少订阅者,从而监控程序的运行。
Promise对象
f1().then(f2).then(f3);
promise中链式编程
let p = new Promise((resolve,reject) => {
setTimeout(() => {
resolve('111')
}, 1000);
})
p.then(res => {
console.log('这个是111=',res)
function f1(resolve,reject) {
// 异步操作,请求接口
setTimeout(res => {
resolve('222')
},1000)
}
return new Promise(f1)
}).then(res => {
console.log('这个是222=',res)
console.log('333')
}).then(res => {
console.log('444')
})
终极解决方案-async函数
async function f() {
// 防止出现错误方法一
try {
await getStockSymbol(name);
} catch(e) {
}
await getStockPrice(symbol)
.catch(err => {
// 防止出现错误方法二
console.log(err)
})
return await Promise.resolve('hello world');
}
f()
.then(v => console.log(v))
网友评论