2017-01-01 30 views
0

私はpromisモジュールを使用してjsonデータをリクエストモジュールから返していますが、実行するたびにこれが表示されます。Node.js約束リクエストの返信

Promise { _45: 0, _81: 0, _65: null, _54: null } 

私はそれを動作させることができません、誰も問題を知っていますか?ここに私のコードです:

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()); 
+0

約束は約束を返す場合、それは投げることができるので、

  • は、それが(.then)解決するか、後の時点でいくつかのデータを(.catch)拒否する契約をのtry/catch周りJSON.parse()を追加します。私はそれらを読んでお勧めします。返された約束を記録する。あなたの要求はその時点で返されていません。 – ste2425

  • 答えて

    4

    約束は、将来の価値のためのプレースホルダーとして機能するオブジェクトです。 parse()関数は、その約束オブジェクトを返します。あなたはこのような約束に.then()ハンドラを取り付けることによって、その約束で将来の値を取得:

    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); 
    }); 
    

    お約束のうちの値を取得する唯一の方法は.then()ハンドラを経由しているので、これは非同期コードです。変更の

    一覧:

    1. 最終的な結果を得るために返された約束のオブジェクトに.then()ハンドラを追加します。
    2. エラーを処理する返された約束オブジェクトのハンドラを.catch()に追加します。
    3. err値のエラーチェックをrequest()コールバックに追加します。無効なJSON
    +0

    おかげで、多くのことを学んだ:) –