困扰了很久的异步问题 一般来说,想要 JS 程序顺序执行,会借助 Promise 的链式结构来顺序调用程序
new Promise(resolve => {
Afunc();
resolve(any);
}).then( res=>{
Bfunc();
})
现在我想要做更复杂一点的事,例如 Afunc 里是 react 组件里的一个发请求并 setState 的函数
Afunc = () =>{
axios.post(`xxx`,{params}).then(res=>{
if(res.xxxx === 'xxxx'){
this.setState({},callBackFunc);
}
})
}
我有一些业务函数(操纵 UI,脏代码)要在 setState 之后才做,也就是塞在 callBackFunc 里 显然
new Promise(resolve=>{
Afunc();
resolve // resolve 之后不知道多少个 then 才执行 Afunc 里的 .then(res=>{...})
})
不满足我新产生的想法。因为 resolve 的时候 Afunc 只跑到 post, .then 里的代码还没轮到 那么我的问题是,如何在不往 Afunc 里塞 callback 的实现一个可以操控的事件流 我现在的做法
Afunc = (callback) =>{
...
this.setState({},()=>{
callback && callback();
})
}
《 You don't know JS 》里看到的好像是 setTimeout 和 promise 混用的时候,把 resolve 给塞到 setTimeout 中的函数 promise((solve)=>{setTimeout(()=>{func, resolve},1000)}
P.S.(如果要手动实现事件队列那还是算了)
P.S. async/await generator 这些也基于 Promise 的语法糖,真的会有用吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.