J'utilise le module promis pour renvoyer mes données json du module de demande, mais chaque fois que je l'exécute, cela me donne ceci.
Promise { _45: 0, _81: 0, _65: null, _54: null }
Je n'arrive pas à le faire fonctionner, quelqu'un connaît le problème? voici mon code:
function parse(){
return new Promise(function(json){
request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) {
json(JSON.parse(body).data.available_balance);
});
});
}
console.log(parse());
Une promesse est un objet qui sert d'espace réservé pour une valeur future. Votre fonction parse()
renvoie cet objet promis. Vous obtenez la valeur future de cette promesse en attachant un gestionnaire .then()
à la promesse comme ceci:
function parse(){
return new Promise(function(resolve, reject){
request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) {
// in addition to parsing the value, deal with possible errors
if (err) return reject(err);
try {
// JSON.parse() can throw an exception if not valid JSON
resolve(JSON.parse(body).data.available_balance);
} catch(e) {
reject(e);
}
});
});
}
parse().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err(err);
});
Il s'agit d'un code asynchrone, de sorte que la SEULE façon d'obtenir la valeur de la promesse est via le gestionnaire .then()
.
Liste des modifications:
.then()
sur l'objet de promesse retourné pour obtenir le résultat final..catch()
sur l'objet de promesse retourné pour gérer les erreurs.err
dans la fonction de rappel request()
.JSON.parse()
car il peut lancer si JSON invalideUtilisez request-promise :
var rp = require('request-promise');
rp('http://www.google.com')
.then(function (response) {
// resolved
})
.catch(function (err) {
// rejected
});