0
votes

L'exemple Q.denodeify ne s'exécute pas correctement

Je suis un débutant dans node, essayant juste un exemple sur l'utilisation de Q. Je ne parviens pas à imprimer le journal 'ajout terminé' . J'obtiens 'inside 7' & '7' dans la sortie. Qu'est-ce que je fais mal?

Mon code est

var Q = require('q');

function Add(callback){

    setTimeout(function(){
        var a, b, c;
        b = 3; 
        a = 4;
        c = a + b; 
        console.log("inside "+c);
        callback(c);
    }, 2000); 

}

var promise = Q.denodeify(Add);

function callback(x){
    console.log(x);
}

promise(callback).then(function(){
    console.log('addition completed');
});


4 commentaires

Votre denodeify ne fonctionne pas


d'accord. Je viens de publier un code qui fonctionne mais j'ai besoin d'une explication.


vous n'avez pas besoin de q pour la promesse, vérifiez ma réponse


Merci pour votre réponse. J'essayais un exemple de tutoriel en ligne donné pour Q en utilisant un code similaire à celui que j'ai publié et je voulais savoir comment le faire. Je comprends que q n'est pas requis pour cet exemple.


3 Réponses :


1
votes

Cet exemple de code ne répondra à aucune question que vous pourriez avoir sur la bibliothèque q code> .
Au lieu de cela, il montre simplement comment vous pouvez utiliser une promesse au lieu d'un rappel pour terminer une tâche asynchrone - ce qui semble être l'objectif sous-jacent de votre code.

(Pour plus d'informations et d'exemples, vous pouvez consulter MDN: Promises )

Notez que les promesses sont une alternative aux rappels, donc une expression comme promise (callback) n'est pas quelque chose que vous écrivez généralement.

De plus, je n'ai examiné q que très brièvement, mais je pense que Q.denodeify n'est peut-être pas la bonne méthode à utiliser pour la tâche que vous essayez d'accomplir.

Pour des suggestions spécifiques à q , vous pouvez également trouver cette réponse utile.

function add(){

  // Calling `add` will return a promise that eventually resolves to `7`
  // There is no way this particular promise can reject (unlike most promises)
  const myPromise = new Promise(function(resolve, reject) {

    // The anonymous function we pass to `setTimeout` runs asynchronously
    // Whevever it is done, it applies the promise's `resolve` function to `c`
    setTimeout(function(){
      const
        a = 4,
        b = 3,
        c = a + b;
      resolve(c);
    }, 200);
  });
  return myPromise;
}

// `add` returns a promise that always resolves to `7`
// The `.then` method of this promise lets us specify a function that 
//   does something with the resolved value when it becomes available
add().then(function(resolvedValue){
  console.log("addition result: " + resolvedValue);
});


0 commentaires

0
votes

Je l'ai un peu peaufiné et je l'ai fait fonctionner. Mais je ne suis pas en mesure de comprendre clairement pourquoi cela a fonctionné et celui qui a précédé a échoué. J'espère que quelqu'un appelle de l'aide avec une explication.

Mon nouveau code est

var Q = require('q');

function Add(callback){

    setTimeout(function(){
        var a, b, c;
        b = 3; 
        a = 4;
        c = a + b; 
        console.log("inside "+ c);
        callback();

    }, 2000); 

}

var promise = Q.denodeify(Add);

promise().then(function(){
    console.log('addition completed');
});


0 commentaires

0
votes

vous pouvez utiliser cet exemple pour la promesse

 var Q = require('q');

    function add(callback){

        return new Promise(function ( resolve, reject) {
            setTimeout(function(){
                var a, b, c;
                b = 3;
                a = 4;
                c = a + b;
                console.log("inside "+c);
                callback(c);
                if(c){
                    resolve(c);
                }else{
                    reject();
                }
            }, 2000);

        });
    }

    //var promise = Q.nbind(add);

    function callback(x){
        console.log(x);
    }

    add(callback).then(function(){
        console.log('addition completed');
    }).catch(function (E) {
        console.log(E);
    });


0 commentaires