promise ,async 小记
Promise 對象用于表示一個異步操作的最終狀態(完成或失敗),以及該異步操作的結果值。
function fn() {
return new Promise((resolve, seject) => {
setTimeout(() => {
let n = parseInt(Math.random) * 6 + 1,10)// 1-6
resolve(n)
}, 3000)
})
}
?
fn().then(
? (x) => { console.log('色子的點數是' + x) },
? () => { console.log('色子壞了')}
)
?
async和await
**async function** 聲明用于定義一個返回 AsyncFunction 對象的異步函數。異步函數是指通過事件循環異步執行的函數,它會通過一個隱式的 Promise 返回其結果。但是如果你的代碼使用了異步函數,它的語法和結構會更像是標準的同步函數。
async function 聲明異步函數
function 聲明同步函數
function fn() {return new Promise((resolve, seject) => {
setTimeout(() => {
let n = parseInt(Math.random) * 6 + 1,10)// 1-6
resolve(n)
}, 3000)
})
}
?
async function test() {
? ?let n = await fn();
? ?console.log(n)
}
?
test()
再增加try...catch語句來捕獲異常
function fn() {return new Promise((resolve, seject) => {
setTimeout(() => {
let n = parseInt(Math.random) * 6 + 1,10)// 1-6
? ? ? ? ? ?if (n>3){
? ? ? ? ? ? ? ?if (猜測 === '大') {
? ? ? ? ? ? ? ?resolve(n);
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ?reject(n);
? ? ? ? ? ? ? }
? ? ? ? ? } else {
? ? ? ? ? ? ? ?if (猜測 === '小') {
? ? ? ? ? ? ? ?resolve(n);
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ?reject(n);
? ? ? ? ? ? ? }
? ? ? ? ? } ?
}, 3000)
})
}
?
async function test() {
? ?try {
let n = await fn("大");
? console.log("好嗨喲" + n)
? }catch (error) {
console.log("輸光了" + n)
? } ?
}
?
fn("大").then(f1, f2).then(f3, f4)
test()
為什么不使用promise.then,而使用async await?
使異步代碼看起來更像是同步代碼,async await看起來更清晰簡單
?
如果有兩個色子,并且猜大小都猜對了才算成功,該怎么做呢?
Promise.all() 這個方法返回一個新的promise對象,該promise對象在iterable參數對象里所有promise 對象都成功的時候才會觸發成功,一旦有任何一個iterable里面的promise對象失敗則立 即觸發該promise對象的失敗。
Promise.race() 當iterable參數里的任意一個子promise被成功或失敗后,父promise馬上也會用子 promise的成功返回值或失敗詳情作為參數調用父promise綁定的相應句柄,并返回該 promise對象。
function 猜大小() {return new Promise((resolve, seject) => {
setTimeout(() => {
let n = parseInt(Math.random) * 6 + 1,10)// 1-6
? ? ? ? ? ?if (n>3){
? ? ? ? ? ? ? ?if (猜測 === '大') {
? ? ? ? ? ? ? ?resolve(n);
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ?reject(n);
? ? ? ? ? ? ? }
? ? ? ? ? } else {
? ? ? ? ? ? ? ?if (猜測 === '小') {
? ? ? ? ? ? ? ?resolve(n);
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ?reject(n);
? ? ? ? ? ? ? }
? ? ? ? ? } ?
}, 3000)
})
}
?
Promise.all([猜大小('大'), 猜大小('小')])
.then(() => {}, () => {})
?
async function test() {
? ?try {
let n = await Promise.all([猜大小('大'), 猜大小('小')]);
? console.log("好嗨喲" + n)
? }catch (error) {
console.log("輸光了" + n)
? } ?
}
?
?
轉載于:https://www.cnblogs.com/yaokai729/p/11261264.html
總結
以上是生活随笔為你收集整理的promise ,async 小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 常用数据库操作
- 下一篇: Mybatis学习笔记13 - 动态sq