web-dev-qa-db-fra.com

Node.js promet le retour de la demande

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());
6
Sam H

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:

  1. Ajoutez le gestionnaire .then() sur l'objet de promesse retourné pour obtenir le résultat final.
  2. Ajoutez le gestionnaire .catch() sur l'objet de promesse retourné pour gérer les erreurs.
  3. Ajoutez une vérification d'erreur sur la valeur err dans la fonction de rappel request().
  4. Ajoutez try/catch autour de JSON.parse() car il peut lancer si JSON invalide
20
jfriend00

Utilisez request-promise :

var rp = require('request-promise');

rp('http://www.google.com')
    .then(function (response) {
        // resolved
    })
    .catch(function (err) {
        // rejected
    });
4
Oded Breiner