3
votes

Comment lire la valeur résolue Promise à partir d'un appel de fonction

J'ai 2 fonctions au total, une fonction qui renvoie une nouvelle promesse et se résout en une variable, comme ceci:

    function getInfo() {
     return promiseTest(require('./allData.json'));
    }

et puis une autre fonction où j'appelle cette fonction, puis en insérant pour la variable data un objet JSON.

  function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
  }

Ma question est donc de savoir comment lire les données à partir desquelles la promesse résout la fonction getInfo , juste dans un simple console.log?

Dites: console.log (getInfo (). data) (mais évidemment cela ne ça ne marche pas mais j'espère aider avec ce que je cherche).


1 commentaires

Vous ne pouvez pas simplement rendre une opération asynchrone synchrone par magie. Utilisez async / await, transmettez des rappels ou utilisez .then.


3 Réponses :


2
votes

Avec les promesses, vous devez utiliser / extraire les données en utilisant un .then (); so

getInfo().then((data) => console.log(data));

Y a-t-il une raison particulière pour laquelle vous devez utiliser une promesse? Votre exemple semble approprié pour utiliser simplement la fonction setTimeout


0 commentaires

1
votes

La valeur renvoyée par la promesse est transmise comme premier paramètre dans la fonction .then .

Veuillez consulter: https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

Dans votre cas, cela pourrait être: getInfo (). then (data => console.log (données));

J'espère que cela vous aidera.


0 commentaires

2
votes

Il y a plusieurs façons de procéder.

Async / await

JavaScript a introduit les mots-clés async et await il y a quelques années . C'est une syntaxe spéciale simplifiant la programmation asynchrone. Vous pouvez rendre vos fonctions asynchrones et utiliser await lors de leur appel. Il enveloppe fondamentalement le entier. then () mess.

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo(callback) {
    promiseTest(require('./allData.json')).then(data => callback(data));
}

getInfo(data => console.log(data));

Ensuite, vous pouvez alors obtenir le résultat de getInfo () en l'attendant: p >

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo() {
    return promiseTest(require('./allData.json'));
}

getInfo().then(data => console.log(data));

Voici quelques lectures qui devraient vous aider:

https://javascript.info/async-await https://developer.mozilla.org/fr/docs/ Web / JavaScript / Reference / Instructions / async_function

.then()

Vous pouvez également utiliser l'ancienne méthode, en utilisant then:

console.log(await getInfo());

Passer un rappel

Vous pouvez transmettre un rappel à votre méthode getInfo.

async function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


async function getInfo() {
    return await promiseTest(require('./allData.json'));
}


0 commentaires