非同期は...オブジェクトの約束を使用して、いくつかの注意問題の使用に待ちます

式(例えば、表現の約束)と非同期を待つことがあり、正規表現を続けてもよい(例:にconsole.log(123))

例1:オブジェクトをただちに解決しない約束を待っていた場合は、以降のコードは実行されません。以下のような:

async function a(){
    // 如果await后是promise对象 
    await new Promise(resolve => {
        console.log(66666)
    })
    console.log(1)
}
a();
Promise.resolve().then(()=>{
    console.log(3)
})

結果:

运行结果:
    66666
    3

ここでは、にconsole.log(1)が実行されません、注意しなければならないので、

async function a(){
    // 如果await紧跟一个普通表达式
    await console.log(1);
    console.log(2)
}

等価に

async function a(){
    new Promise(resolve => {
        console.log(1)
    }).then(() => {
        console.log(2)
    })
}

プロミスが解決されていない全く状態が存在しないので、後続.thenコードを実行しないであろう。

実行プロセス図:

例2:オブジェクトのawaitが続いた場合の約束はすでに解決 

async function a(){
    // 如果await紧跟一个已经resolved的promise对象 
    await new Promise(resolve => {
        resolve();
        console.log(66666)
    })
    console.log(1)
}
a();
Promise.resolve().then(()=>{
    console.log(3)
})

結果:

运行结果:
    66666
    1
    3

実行プロセス図:

 

例3:のawait正規表現が続いた後、

async function a(){
    // 如果await紧跟一个普通表达式
    await console.log(1);
    console.log(2)
}
a();
Promise.resolve().then(()=>{
    console.log(3)
})

結果:

运行结果:
    1
    2
    3

実行プロセス図:

実施例4:A、より複雑な例

function c(){
    return new Promise((resolve)=>{
        console.log('开始了')
        resolve()
    }).then(()=> {
        console.log('c.......');
        return 65666
    }).then(res => {
        console.log(res);
        return '返回了一个值'
    })
}
async function a(){
    // 如果await后的表达式是一个promise对象 
    await c().then((res)=>{
        console.log('then....' + res)
    })
    console.log(1)
}
a();
console.log('同步代码')
Promise.resolve().then(()=>{
    console.log(3)
})

結果:

    '开始了'
    '同步代码'
    'c.......'
    3
    65666
    'then....返回了一个值'
    1

実行プロセス図:

例9:

 

 

 

 

 

 

 

 

 

 

 

 

 

公開された47元の記事 ウォンの賞賛3 ビュー10000 +

おすすめ

転載: blog.csdn.net/u010047432/article/details/104679231