Quelle est la différence entre les deux (sans retour)

function doAsyncTask() {
  var promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("Async Work Complete");
      if (error) {
        reject();
      } else {
        resolve();
      }
    }, 1000);
  });
  return promise;
}

Ce qui suit n'a pas de "promesse de retour"

function doAsyncTask() {
  var promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("Async Work Complete");
      if (error) {
        reject();
      } else {
        resolve();
      }
    }, 1000);
  });
}
-1
user1034912 11 févr. 2020 à 12:58

3 réponses

Meilleure réponse

En tant qu'extension de Quentin répondez, vous devez toujours renvoyer une promesse.

L'idée est, si une fonction est une fonction asynchrone, elle devrait fournir un moyen d'écouter les changements. C'est à l'appelant de décider s'il doit réagir aux changements.

Vous pouvez donc appeler votre fonction comme:

doAsyncTask().then(...);

Ou juste

doAsyncTask();

Mais si nous ne rendons pas la promesse, l'appelant n'aura jamais la possibilité d'écouter.

3
Rajesh 11 févr. 2020 à 10:07
var doAsyncTask1 = function() {
   var promise = new Promise(resolve => {
        /// task that takes 5 seconds
        setTimeout(resolve, 5000);
   });
   return promise;
}

var doAsyncTask2 = function() {
   var promise = new Promise(resolve => {
        /// task that takes 5 seconds
        setTimeout(resolve, 5000);
   });
   // no return
}

await doAsyncTask1();
console.log('task complete'); // this line of code runs 5 seconds after the previous one

await doAsyncTask2(); // because you have returned nothing, 'await' does nothing
console.log('task2 not complete yet'); // this line of code runs immediately after the previous one, before the 5-second task is complete
-3
TKoL 11 févr. 2020 à 10:59

ES6 pourquoi faut-il retourner une promesse?

Non.

Quelle est la différence entre les deux (sans retour)

La différence est que l'on ne retourne rien.

(Vous ne pouvez donc pas appeler doAsyncTask et utiliser la valeur de retour).

3
Quentin 11 févr. 2020 à 09:59