web-dev-qa-db-ja.com

Node.jsのプロミスリクエストリターン

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

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

約束は、将来の価値のプレースホルダーとして機能するオブジェクトです。 parse()関数は、そのpromiseオブジェクトを返します。次のように.then()ハンドラーをpromiseにアタッチすることにより、そのpromiseの将来の値を取得します。

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

これは非同期コードなので、promiseから値を取得する唯一の方法は、.then()ハンドラーを使用することです。

変更のリスト:

  1. 返されたpromiseオブジェクトに.then()ハンドラーを追加して、最終結果を取得します。
  2. エラーを処理するために、返されたpromiseオブジェクトに.catch()ハンドラーを追加します。
  3. request()コールバックのerr値のエラーチェックを追加します。
  4. 無効なJSONの場合にスローできるため、JSON.parse()の周りにtry/catchを追加します
20
jfriend00

request-promise を使用します。

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

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