Maison > Article > interface Web > async/wait requêtes parallèles et gestion des erreurs
Cet article présente principalement les requêtes parallèles async/wait et la gestion des erreurs. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Lors de l'utilisation asynchrone, il est facile de faire des erreurs dans l'ordre d'exécution du code. Par exemple, si nous voulons lancer deux requêtes en même temps, nous pouvons écrire le code suivant
<.>function fetchName () { return new Promise((resolve, reject) => { setTimeout(() => { resolve('lujs') }, 3000) }) } function fetchAvatar () { return new Promise((resolve, reject) => { setTimeout(() => { resolve('https://avatars3.githubusercontent.com/u/16317354?s=88&v=4') }, 4000) }) } async fetchUser () { const name = await fetchName() const avatar = await fetchAvatar() return { name, avatar } } (async function () { console.time('should be 7s ') const user = await fetchUser() console.log(user) console.timeEnd('should be 3s ') })()dans ce qui précède Dans le code, nous pensons que fetchName et fetchAvatar seront exécutés en parallèle, mais en fait ils ne le seront pas. fetchAvatar attendra que fetchName soit exécuté avant de lancer la requête. Le temps d'exécution de la fonction fetchUser n'est pas de trois secondes mais de 7 secondes Si vous souhaitez faire des requêtes parallèles, vous devez écrire comme suit Le temps d'exécution de fetchUserParallel est de 4 secondes <.>Utilisez Promise.all pour la demande de simultanéité
async function fetchUserParallel () { const namePromise = fetchName() const avatarPromise = fetchAvatar() return { name: await namePromise, avatar: await avatarPromise } } (async function () { console.time('should be 3s, but time is ') const user = await fetchUser() console.log(user) console.timeEnd('should be 3s, but time is ') console.time('should be 3s : ') const user2 = await fetchUserParallel() console.log(user2) console.timeEnd('should be 3s : ') })()Error Get
function fetchList (id) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(`id is : ${id}`) }, 5000) }) } async function getList () { const ary = [1, 2, 3, 4] const list = Promise.all( ary.map( (id) => fetchList(id))) return await list } (async function () { // 使用promise并发请求 console.time('should be 3s ') const list = await getList() console.log(list) console.timeEnd('should be 3s ') })()
try { const user3 = await fetchUser(true) } catch (err) { console.error('user3 error:', err) }
/** * 包装promise, 使其返回统一的错误格式 * @param {Promise} promise */ function to (promise) { return promise.then(res => [null, res]).catch(err => [err]) } . . . const [err, res] = await to(fetchUser(true)) if (err) { console.error('touser err:', err) }Si vous êtes intéressé, vous pouvez exécuter le code
// 因为async 返回的promise对象,所以可以使用catch const user4 = await fetchUser(true).catch(err => { console.error('user4 error:', err) })Tester le code<.>
Ce qui précède est le contenu complet de l'article, j'espère qu'il sera utile à l'apprentissage de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !Recommandations associées :
le nœud explore les données de Lagou.com et les exporte sous forme de fichier Excel
Native JS est basé sur la fenêtre. scrollTo() encapsule la fonction de l'outil d'animation à défilement vertical
Similitudes et différences entre les navigateurs et EventLoop de NodeJS et les machines partielles
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!