2017-10-12 11 views
0

J'ai trois fonctions: asyncFonctions Async ne sont pas appelés séquentiellement

getAccounts = async() => { 
    try { 
     const result = await someAsyncJob(); 
     ... 
    } 
    catch(err) { 
     ... 
    } 
} 
getPages = async() => { 
    try { 
     const result = await someAsyncJob(); 
     ... 
    } 
    catch(err) { 
     ... 
    } 
} 
getDepositList = async() => { 
    try { 
     const result = await someAsyncJob(); 
     ... 
    } 
    catch(err) { 
     ... 
    } 
} 

Ici, j'ai des fonctions nommées "getAccounts", "getPages", "getDepositList". Je dois appeler ces fonctions de manière séquentielle, alors j'ai écrit le code comme ceci:

getData = async() => { 
    try { 
     await getAccounts(); 
     await getPages(); 
     await getDepositList(); 
    } 
    catch(err) { 
     ... 
    } 
} 

A partir de cet article (https://medium.com/@peterchang_82818/asycn-await-bible-sequential-parallel-and-nest-4d1db7b8b95c), il doit être un travail séquentiel mais quand je courais, ils sont invoquent ensemble et tous mes la logique a été foiré.

Comment exécuter ces fonctions de manière séquentielle?

+3

Un pointeur sans rapport: vous n'avez pas * * à * emballer chaque expression 'await' dans un bloc try/catch. Voir cet exemple: https://repl.it/M6Cn/3 - l'erreur se propage dans toute la chaîne d'appel de la fonction. – Svenskunganka

Répondre

3

Si l'exécution voit un attente, elle ne devrait continuer qu'après que la promesse soit résolue, ou rejetée, ainsi elle devrait être séquentielle. J'espère que vous aussi attendez getData()?

+0

Non, la fonction getData est invoquée à partir de la fonction normale. – modernator

+2

Ah ouais, cela ne devrait pas être un problème, désolé pour la confusion. Qu'est-ce qui vous permet de supposer qu'ils sont invoqués "ensemble"? –

+0

Eh bien, j'étais piscine. J'ai invoqué ensuite chaque fonction à l'intérieur d'eux après l'attente, c'est pourquoi ils ont invoqué au hasard. Ça fonctionne, merci. – modernator