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');
});
3 Réponses :
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);
});
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');
});
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);
});
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.