通过发布订阅模式实现异步接口的顺序调用
publish.js
class Publish{
constructor() {
this.events = {}
}
sub(event,callback){
if(this.events[event]){
this.events[event].push(callback)
}
else
this.events[event]=[callback]
}
publish(event,...agrs){
if(this.events[event].length){
this.events[event].forEach(callback=>{
callback.call(this,...agrs)
})
}
}
}
module.exports = Publish
test.js
const axios = require('axios')
const Pub = require('./publish')
const pub = new Pub();
/**
axios.get是同步方法,所以按顺序先执行axios.get,然后是pub.sub
pub.sub的回调函数是异步,只有pub.publish('firstRequest')发布时,
才会执行
综上:同步方法先注册事件,然后依据执行顺序进行发布,即可完成按顺序执行
*/
axios.get('https://www.baidu.com').then(res =>{
if(res.status === 200){
console.log('first')
pub.publish('firstRequest')
}
})
pub.sub('firstRequest',()=>{
axios.get('https://www.baidu.com').then(res=>{
if(res.status === 200){
console.log('second')
pub.publish('secondRequest')
}
}
)
})
pub.sub('secondRequest',()=>{
axios.get('https://www.baidu.com').then(res=>{
if(res.status === 200){
console.log('third')
}
}
)
})