式(例えば、表現の約束)と非同期を待つことがあり、正規表現を続けてもよい(例:に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: