J'ai un code javascript comme ceci:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
J'ai toujours une valeur indéfinie pour le test var. Je pense que c’est parce que les promesses ne sont pas résolues jet..il y a-t-il un moyen de retourner une valeur d’une promesse?
Lorsque vous renvoyez quelque chose à partir d'un rappel then()
, c'est un peu magique. Si vous retournez une valeur, la prochaine then()
est appelée avec cette valeur. Cependant, si vous retournez quelque chose qui ressemble à une promesse, la prochaine then()
l'attend et n'est appelée que lorsque cette promesse se règle (réussit/échoue).
Pour utiliser une promesse, vous devez soit appeler une fonction qui crée une promesse, soit en créer une vous-même. Vous ne décrivez pas vraiment le problème que vous essayez réellement de résoudre, mais voici comment créer une promesse vous-même:
function justTesting(input) {
return new Promise(function(resolve, reject) {
// some async operation here
setTimeout(function() {
// resolve the promise with some value
resolve(input + 10);
}, 500);
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
Ou, si vous avez déjà une fonction qui retourne une promesse, vous pouvez utiliser cette fonction et retourner sa promesse:
// function that returns a promise
function delay(t) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, t);
});
}
function justTesting(input) {
return delay(100).then(function() {
return input + 10;
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
Ce que j'ai fait ici, c'est que j'ai retourné une promesse de la fonction justTesting. Vous pouvez alors obtenir le résultat lorsque la fonction est résolue.
// new answer
function justTesting() {
return new Promise((resolve, reject) => {
if (true) {
return resolve("testing");
} else {
return reject("promise failed");
}
});
}
justTesting()
.then(res => {
let test = res;
// do something with the output :)
})
.catch(err => {
console.log(err);
});
J'espère que cela t'aides!
// old answer
function justTesting() {
return promise.then(function(output) {
return output + 1;
});
}
justTesting().then((res) => {
var test = res;
// do something with the output :)
}
Pour moi, callback a fonctionné dans cette situation. J'avais le même problème et toutes les réponses précédentes ne fonctionnaient pas pour moi (je ne sais pas vraiment pourquoi). Donc, exemple du code qui devrait fonctionner:
function justTesting(callback) {
promise.then(function(output) {
return output + 1;
});
}
then call it:
justTesting(function (yourOutput) {
// here you can use your outpur from justTesting func
var test = yourOutput;
})