日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

promise ,async 小记

發布時間:2024/7/5 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 promise ,async 小记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Promise

Promise 對象用于表示一個異步操作的最終狀態(完成或失敗),以及該異步操作的結果值。

搖色子游戲,隨機1-6的一個整數,并且將其返回。

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 小记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。