这样的Promise如何改写成async/await?

我有一段回调的代码,三个确认框按顺序弹出(用的Ext框架,可以在这个页面执行http://extjs.cachefly.net/ext...)

Ext.MessageBox.confirm("confirm","是否继续1?", function(btn){
    if(btn=='yes'){
        doSomething1();
    }
});

function doSomething1(){
    console.log("do something1")
    Ext.MessageBox.confirm("confirm","是否继续2?", function(btn){
        if(btn=='yes'){
            doSomething2();
        }
    });
}

function doSomething2(){
    console.log("do something2")
    Ext.MessageBox.confirm("confirm","是否继续3?", function(btn){
        if(btn=='yes'){
            doSomething3();
            Ext.MessageBox.hide();
        }
    });
}

function doSomething3(){
    console.log("do something3")
}

我将它改写成了Promise,但是想要进一步改写成async/await时,我不会做了

function p1(){
    return new Promise((resolve, reject) => { 
        Ext.MessageBox.confirm("confirm","是否继续1?", function(btn){
            if(btn=='yes'){
                resolve()
            }
        });
    })
}

function p2(){
    return new Promise((resolve, reject) => { 
        Ext.MessageBox.confirm("confirm","是否继续2?", function(btn){
            if(btn=='yes'){
                resolve()
            }
        });
    })
}

function p3(){
    return new Promise((resolve, reject) => { 
        Ext.MessageBox.confirm("confirm","是否继续3?", function(btn){
            if(btn=='yes'){
                resolve()
            }
        });
    })
}

p1().then(res=>{
    console.log("do something1");
    return p2();
}).then(res=>{
    console.log("do something2");
    return p3();
}).then(res=>{
    console.log("do something3");
})
阅读 2.9k
2 个回答
function confirm(title) {
  return new Promise((resolve,reject) => Ext.MessageBox.confirm("confirm",title, btn => btn === 'yes' ? resolve() : reject()))
}

await confirm('是否继续1?')
// do 1
await confirm('是否继续2?')
// do 2
await confirm('是否继续3?')
// do 3

await返回值了解下
通过reslove返回不同的返回值,然后再判断是否继续下面的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题