请问多个async函数块之间如何同步的进行执行?例子:以下两个async函数块如何顺序进行?class Example { first; second; constructor(){ } async getFirstVal(){ this.first = await [一个promise] } async getSecondVal(){ this.second = await[一个依赖于first的promise] } async getOtherVal(){ this.other = await[一个promise] } doSomeWork(){ this.getFirstVal(); this.getSecondVal(); this.getOtherVal(); ........ }}请问,怎么做才能保证doSomeWork里面的first和second这两个异步块顺序执行?我不想将second这一部分的逻辑写入getFirstVal方法中,虽然这样能获得正确的执行顺序,因为getFirstVal可能在很多地方都会异步调用到,我想将他封装成一个单独的函数。请问有什么好的方法帮助我实现这种async块之间的顺序执行吗?
2 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
function async2() {
console.log( 'async2');
}
async function async1(resolve) {
await setTimeout(function () {
console.log("settimeout");
//当我认定async1完成后才开始async2
resolve()
},0);
}
new Promise(function (resolve) {
async1(resolve)
}).then(function () {
async2()
});
或者
new Promise(function (resolve) {
async1()
resolve()
}).then(function () {
async2()
});
虽然记得不是很清楚了,但第一种代码似乎被称作“Promise构造器反模式”,最大的问题是async1
抛出的错误会被吃掉。
如果我没有记错,是不提倡把resolve
泄露出去的,而且不应该在构造器里出现任何Promise,应该.then
下去。我见到的最佳实践都是构造器只包装老API,不放逻辑。所以这段代码虽然看起来涨姿势,我个人还是觉得值得商榷的。
添加回答
举报
0/150
提交
取消