Promiseとasync await面接の知識点
3241 ワード
Promiseの正常な使い方 Promise.resove()製造成功または失敗 Promise.reject()製造失敗 Promise.allは、すべての成功を待っています.または、失敗があります. Promise.race(配列)は、最初の状態変化を待つ Promise.all Settledは、すべての状態が変化するのを待っています.APIは新しいので、ブラウザがサポートするのは より少ないです.
プロミスの文法飴
Promise.then(fn 1).catch(s 1)イコールPromise.then(fn 1,s 1)
Promiseの面接問題
ページには2つのボタン AとBと入力ボックスがあります.Aボタンをクリックして、一つの要求を送ります.一つの文字列Aに戻ります.Bも要求を送りますが、文字列Bに戻ったら文字列を入力ボックスに割り当てます.しかし、AとBが送った二つの要求は戻り時間が違っています.二つのボタンをクリックした順番も違います.BはAより先に戻ります.最終的な効果は、入力枠の文字の順序がABであることが要求されます.
prmise.allはこの需要を満たしにくいです.これは1つの配列で彼らを記録する必要があります.Bが帰ってきたら、配列の中で比較します.順序は1ではなく、Aが帰ってきたら、Aを出力してからBを出力すればいいです.
実現コードを直接見てください.
async awaitの基本的な使い方
どうしてasync await関数の前にasyncがありますか?
古いコードに対応するために、async/await機能と同じawait関数を実現した人がいます.
async awaitエラー処理を最適化する
よくあるエラー処理方法try/catch
async/awaitは実はPromiseの文法飴です.
async await面接試験問題
ここで考察している知識点:a+await 10の前のa awaitと一緒に非同期によって確定されますか?それともaが先に値を確定しますか?
実際にawaitの前の値は同期して実行されます.awaitの後ろの方が非同期です.これを覚えておけばよく分かります.
タイトルの中では先にロゴマークしましたが、+aは1です.しかし、test()関数ではa+ await 10 のaはtest()の運転時にすでに値を確定しました.値は0です.
0+非同期のawait 10は10に等しい.
function xx(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resovle(' ')
reject(' ')
},3000)
})
}
xx().then(fn1,s1).then(fn2,s2)//fn ,s
PromiseのAPIプロミスの文法飴
Promise.then(fn 1).catch(s 1)イコールPromise.then(fn 1,s 1)
Promiseの面接問題
ページには2つのボタン AとBと入力ボックスがあります.Aボタンをクリックして、一つの要求を送ります.一つの文字列Aに戻ります.Bも要求を送りますが、文字列Bに戻ったら文字列を入力ボックスに割り当てます.しかし、AとBが送った二つの要求は戻り時間が違っています.二つのボタンをクリックした順番も違います.BはAより先に戻ります.最終的な効果は、入力枠の文字の順序がABであることが要求されます.
prmise.allはこの需要を満たしにくいです.これは1つの配列で彼らを記録する必要があります.Bが帰ってきたら、配列の中で比較します.順序は1ではなく、Aが帰ってきたら、Aを出力してからBを出力すればいいです.
実現コードを直接見てください.
let ajax1 = ()=>{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve(1111)
},5000)
})
}
let ajax2 = ()=>{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve(2222)
},3000)
})
}
let batai = []
let duiwu = []
let hi = () =>{
let lastN = batai[batai.length - 1][0]
let lastS = batai[batai.length - 1][1]
console.log(duiwu,' ')
console.log(batai,' ')
if(duiwu[0][0] === lastN) {
duiwu[0][1](lastS)
duiwu.shift()
batai.pop()
hi()
}
}
b1.onclick = ()=>{
const n = 1
ajax1().then(res=>{
batai.push([n, res])
hi()
})
duiwu.push([n, s=>{
input1.value = s
}])
}
b2.onclick = ()=>{
const n = 2
ajax2().then(res=>{
batai.push([n, res])
hi()
})
duiwu.push([n, s=>{
input1.value = s
}])
}
async awaitの基本的な使い方
const fn = async ()=>{
const fn1 = await newPromise()
return fn1 + 1
}
Promiseと比較して、同期コードを書いているようにロックされていません.どうしてasync await関数の前にasyncがありますか?
古いコードに対応するために、async/await機能と同じawait関数を実現した人がいます.
await(newPromise())
ですから、区別をするために、関数の前にasyncを追加して示すのは違っています.他の特別な意味はありません. async awaitエラー処理を最適化する
よくあるエラー処理方法try/catch
let response
try{
response = await axios.get('/xx')
}.catch(err){
if(err.response){
console.log(err.response.states)
}
throw err
}
console.log(response)
このように処理する感じはあまり良くなくて、私達は最適化することができて、Promiseを結び付けて次のコードを書きます.const response = await axios.get('/xx').then(null, err)
console.log(response)
レスポンス処理に成功した結果、then(null,err)のerr処理が失敗しました.async/awaitは実はPromiseの文法飴です.
async await面接試験問題
let a = 0;
let test = async () => {
a = a + await 10;
console.log(a)
}
test()
console.log(++a)
ロゴはそれぞれ何を出力しますか?ここで考察している知識点:a+await 10の前のa awaitと一緒に非同期によって確定されますか?それともaが先に値を確定しますか?
実際にawaitの前の値は同期して実行されます.awaitの後ろの方が非同期です.これを覚えておけばよく分かります.
タイトルの中では先にロゴマークしましたが、+aは1です.しかし、test()関数ではa+ await 10 のaはtest()の運転時にすでに値を確定しました.値は0です.
0+非同期のawait 10は10に等しい.